728x90
특정 JAVA process의 CPU 사용량이 과도하게 높을 때, 해당 원인을 파악하는 방법이다.
* CPU가 높은 이유는?
=> WAS 자체 문제, 사용자가 만든 thread, 잘못된 코딩 방식, 타사 소프트웨어 등 다양한 이유로 발생할 수 있음.
따라서 정확한 문제 발생 원인을 파악하기 어렵기 때문에 아래와 같은 패턴을 통해 수집된 데이터를 활용하여 문제를 해결하는데 도움을 줄 수 있다.
* 단계별 수집 방법
1. Top을 실행해서 java process 중 CPU 사용량이 높은 PID를 확인
=> 사용량이 많지 않은 weblogic 테스트 서버이지만, 아래를 위해 해당 '207944' PID 선정
=> Linux용 JVM은 java thread를 native thread로 구현하였기에 각 thread는 별도의 Linux process가 된다.
=> '207944' PID를 16진수로 변환한다. (변환값 : 0x32ca7)
2. thread dump 확인
kill -3 [PID]로 thread dump 확인
위 16진수 값과 nid 값이 일치하는 thread를 확인한다.
3. shell을 이용하여 위의 단계를 처리
for loopnum in 1 2 3 do top -b -n1 >> dump_high_cpu.txt kill -3 $1 echo "cpu snapshot and thread dump done. #" $loopnum sleep 1 echo "Done sleeping." done |
=> thread dump는 보통 3번은 연속적으로 뜨는 것을 권장하기 때문
728x90
'JAVA > JAVA' 카테고리의 다른 글
Java Native Memory Tracking (jcmd 사용) (0) | 2023.02.01 |
---|---|
HashMap (0) | 2022.12.26 |
java/lang/object (1) | 2022.12.26 |
JVM memory 모니터링 (1) | 2022.09.23 |
JMX (0) | 2022.06.14 |