>  기사  >  Java  >  Java 프로세스 CPU 사용량 100% 문제를 해결하는 방법

Java 프로세스 CPU 사용량 100% 문제를 해결하는 방법

不言
不言앞으로
2019-03-19 09:25:095154검색

이 문서의 내용은 Java 프로세스의 100% CPU 사용 문제를 해결하는 방법에 대한 것입니다. 특정 참고 값이 있으므로 도움이 될 수 있습니다.

100%는 CPU의 코어 1개를 차지하는 것을 의미하고, 코어 2개가 200%를 차지하는 등의 의미입니다.
CPU 사용량 및 해당 프로세스 ID(pid)는 top 명령을 통해 확인할 수 있습니다. 상단 인터페이스에서 c(전체 명령줄 매개변수 표시)를 누르고 1(각 코어의 통계 표시)을 누릅니다. (권장: Java 튜토리얼)

이 문제에 대한 가장 일반적인 가능성은 다음과 같습니다.

1. 힙 메모리가 부족하면 Full GC가 자주 발생합니다.
두 가지 명령을 통해 확인할 수 있습니다.

sudo jmap -heap pid 힙을 확인합니다. 메모리 소모 상황

sudo jstat -gc pid 간격 개수 GC 상태 확인 예: sudo jstat -gc 5746 3000 5는 5746 프로세스의 GC 상태를 확인하여 3000밀리초마다 인쇄하여 총 5번 인쇄한다는 의미입니다. FGC/FGCT가 크게 증가하면 Full GC가 매우 자주 발생합니다.

후속 처리:

상황이 긴급한 경우 즉시 Java 애플리케이션 프로세스를 다시 시작해야 합니다. 긴급하지 않은 경우 관련 정보를 얻어 힙 메모리가 소비되는 이유를 분석해야 합니다. 누수 문제는 1) sudo jmap -histo pid | head -n 20 Java 객체의 점유 통계 보기, 2) sudo jmap -dump:live,format=b,file=heap.bin pid 힙 덤프 내보내기를 사용할 수 있습니다. 로컬 파일인 경우 Eclipse MAT 도구를 사용하여 메모리 누수를 분석할 수 있습니다

2. 코드 구현 문제

아이디어: 어떤 스레드가 CPU를 점유하고 있는지 추적하려면 1) 먼저 로컬 시스템에서 CPU 사용량이 높은 스레드 ID를 찾으세요. , 2) 해당 Java 스레드와 스레드 스택 찾기

top -H - p pid 프로세스에서 어떤 스레드가 CPU를 점유하고 있는지 확인하고 해당 스레드 ID를 복사하여 16진수로 변환합니다. [IDEA》Tools》Groovy Console》println Long .toHexString(1234)을 사용하여 변환을 완료합니다].

sudo jstack -l -F pid | less Java 스레드 스택을 가져오고 16진수 로컬 스레드 ID로 검색하면 특정 줄의 nid에서 해당 스레드를 찾을 수 있습니다. Java 스레드 스택을 확인하여 해당 Java 클래스와 줄 번호를 찾은 다음 코드를 읽어 문제의 가능한 원인을 찾으십시오.

jstack 스택 정보의 tid/nid에 대한 지침
https://docs.oracle.com/javas...

The thread dump consists of the thread stack, including the thread state, for all Java threads in the virtual machine.

The header line contains the following information about the thread:
- Thread ID (tid), which is the address of a thread structure in memory.
- ID of the native thread (nid).


위 내용은 Java 프로세스 CPU 사용량 100% 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제