JDK 공통 도구를 사용하여 문제 해결 프로세스
jps 포지셔닝 프로세스
jstat 통계 힙 통계
jstack 포지셔닝 문제 스레드
jmap 포지셔닝 문제 객체 일반적으로 jps 를 사용하여 pid
-l 매개 변수로 이동하면 전체 클래스 경로 또는 jar 패키지 경로가 인쇄되고, -v 매개 변수는 시작 매개 변수
를 인쇄합니다. 참고: PS -ef | grep Java 는 시작 매개 변수와 jar 경로를 인쇄할 수 있습니다 그러나 클래스 경로
jstat 를 인쇄할 수 없습니다. 힙 영역 사용량 등에 대한 정보
다음 그림에서 jstat -gc 1 1000 5 명령은 PID 1 프로세스 힙에 대한 정보가 1000ms 당 한 번 인쇄됨을 나타냅니다. * *
S0C 는 S0 의 용량 (총 용량), S0U 는 S0 의 used, 즉 사용된 공간 (kb) 을 나타내며 U/C 는 사용률을 얻을 수 있습니다 (예: MU/MC = 메타공간 활용도).
E, o, m 은 각각 Eden 구역, 구 시대, 메타 공간, YGC/YGCT 는 YGC 의 GC 수 /GC 시간, FGC/FGCT 는 FGC 의 GC 수 /GC 시간을 나타냅니다.
-gc 매개 변수는 특정 값을 표시하고, -gcutil 표시 비율
jstack 은 프로세스 내 스레드 정보를 보는 데 사용되며 CPU 문제 해결에 자주 사용됩니다
jstack 사용
이 단계에서는 CPU 가 비교적 높은 스레드를 차지하고 CPU 가동 시간 (예: TIME+ 열) 이 긴 스레드
여기에 문제가 있습니다. CPU 가 얼마나 높습니까?
4 코어 CPU 가 있고, 한 코어는 100 으로 가득 차 있고, 전체 CPU 는 최대 400 까지 달리고 있다고 가정합니다.
while true (while true) 가 있는 경우 CPU 는 보통 9, 100 미만이 될 수 있습니다. while true 도 시간 슬라이스가 순환되기 때문입니다.
또한 CPU 가동 시간도 중요한 지표입니다. 위 그림에서 PID 가 71 인 스레드는 2 시간 18 분 동안 달렸는데 문제가 있을 것입니다.
2 단계, 현재 스레드 정보를 thread dump 파일
3 단계로 내보내고, 이전 단계에서 발견된 문제 스레드의 PID 에 따라 PID 를 16 진수로 변환합니다. thread dump 파일에서 스레드 PID 가 Thread dump 파일에서 이전 단계에서 계산된 스레드 PID 의 16 진수를 검색합니다. 일반적으로 마지막 20 줄을 보면 전체 호출 스택을 볼 수 있습니다.
이 스레드는 Kafka 소비자 스레드
참고: 개발 시
또한 Thread 클래스의 getAllStackTraces 메서드는 현재 가상 시스템의 모든 스레드에 대한 호출 스택을 가져올 수 있으며 개발자가 생산에 불편할 경우 인터페이스를 노출하는 데 사용할 수 있습니다.
jmap 프로세스에 대한 개체 정보를 보는 데 사용되며 메모리 문제 해결에 자주 사용됩니다
jmap-dump: live, format=b, file =/root
주석:
heap dump 파일의 크기는 현재 힙 사용량의 크기와 일치합니다. 힙 사용량이 2G 이면 heap dump 파일의 크기는 2G 이고 heap dump 파일을 내보내는 데 시간이 오래 걸리며 내보내기 프로세스가 발생할 수 있습니다
또한 heap dump 파일은 jhat, jvisualvm, mat 등의 전문 도구로만 볼 수 있으며 grep 등의 명령으로 검색할 수 없습니다.
요약하면 이 명령은 일반적으로 운영 환경에서 거의 사용되지 않습니다.
jmap-histo: live PID 통계 클래스 인스턴스 수 및 바이트 수.
일반적으로 jmap -histo:live PID | grep packge 를 사용하여 메모리 누수 여부를 확인하고 page 는 Java 프로젝트의 패키지 이름
jmap-j-d66 입니다