JAVA

    AlwaysPreTouch JVM option

    -XX:+AlwaysPreTouch 옵션은 Heap Size가 클 경우 JVM이 기동될 때 미리 Heap 공간을 0으로 채워 초기화 해 둔다. 이를 통해 부팅 속도는 느려지지만 실행 시 속도가 빨라지는 효과를 얻을 수 있다. (https://kwonnam.pe.kr/wiki/java/options 참조) ============================================================================ WebLogic의 Heap memory를 Xms 1G, Xmx 2G로 설정한 이후 option 유무에 따른 memory 차이를 test 해봤다. WebLogic 기동 전 memory는 다음과 같다. option 없이 기동을 했을 경우의 memory 윗 JAVA opti..

    ClassLoader

    JAVA ClassLoader란? - JVM의 구성 요소 중 하나로, 클래스가 요청될 때, '.class' 파일로부터 바이트 코드를 읽어 들여 class 객체를 생성하고 메모리로 로딩하는 역할을 한다. 즉, 각 directory에 흩어진 class 파일들을 찾아서 JVM 메모리에 탑재해주는 역할을 한다. ClassLoader가 class 파일을 로드하는 단계는 크게 3가지 단계로 나뉜다. 1. Loading - 클래스 파일을 탑재하는 과정 2. Linking - 클래스 파일을 사용하기 위해 검증 및 기본값으로 초기화하는 과정 3. Initializing - static field의 값들을 정의한 값으로 초기화하는 과정 ================================================..

    Thread dump

    Thread dump란 JVM에서 사용하는 thread들에 대한 dump를 의미한다. 즉 JAVA process에 속한 모든 thread들의 상태를 기록한 것이다. Thread dump를 확인하는 경우는 다음과 같다. (참고: https://mkil.tistory.com/54) 1. 해당 application에서 현재 어떤 thread 부분이 어떻게 수행하고 있는지에 대한 stack을 확인하기 위함. 2. process가 hang 상태이거나, 응답 시간이 지연되거나, CPU를 많이 점유하는 thread가 있는 경우, 확인하기 위함. 3. thread dump는 stack 정보를 확인하기에, 한 시점의 정보만 보는 것이 아닌, 5초 간격으로 최소한 3번 thread dump를 뜨는 것을 권장한다. 이는 s..

    Virtual Host

    Web Server에는 하나의 서버 내에 기본적으로 Main Host가 존재한다. 하지만 Main Host 외에 추가적으로 여러 개의 도메인 이름을 호스팅 할 수 있는데, 이를 가상 호스팅 또는 버추얼 호스팅 (Virtual Host)라고 부른다. Virtual Host를 통해 한 서버는 memory, process cycle 등 자원을 공유할 수 있다. 가상 호스트 운용 방식은 다음과 같다. 1. 이름 기반 가상 호스트 (Name-based virtual host) : 하나의 IP address에 여러 개의 virtual host를 운용함. 2. 주소 기반 가상 호스트 (IP-based virtual host) : virtual host 각각에 하나씩의 IP Address를 할당하여 운용함. 3. 포트..

    JVM memory 구조

    JVM이란? => Java Virtual Machine의 약자. JAVA와 OS 사이에서 중개자 역할 및 JAVA가 OS에 구애받지 않고 프로그램 실행시킬 수 있도록 도와주는 역할. Garbage Collector를 사용하여 메모리 관리도 자동으로 수행하고, Stack 기반으로 동작함. (참고: https://steady-coding.tistory.com/305) JVM은 크게 4가지 영역으로 나눌 수 있다. 1. Class Loader => .java 소스 파일을 JAVA Compiler를 통해 .class 파일로 생성됨. Class Loader는 이렇게 생성된 Class 파일들을 엮어서 OS가 JVM으로 할당해준 Memory 영역인 (Runtime Data Area)로 적재하는 역할을 함. 2. Ex..

    JAVA option - urandom option

    -Djava.security.egd=file:/dev/urandom 난수 발생기를 /dev/random에서 /dev/urandom/으로 바꾸는 옵션. ## /dev/random : blocking mode - 시스템 커널의 entrophy pool에서 random 가져올때 pool이 비어있으면 pool에 들어올때까지 blocking 됨. - 랜덤 분포도가 상대적으로 넓다. / 다량의 랜덤 데이터 생성시 block 됨. ## /dev/urandom : non blocking mode - 시스템 커널의 entrophy pool에서 random 가져올때 pool이 비어있으면 기다리지 않고 sha나 md5로 임의로 생성. - 다량의 랜덤 데이터 생성시 유리. / 랜덤 분포도가 상대적으로 좁다. ---------..