jmap histo /pid > ./log.txt: 특정 프로세스의 인스턴스 수, 점유된 메모리 바이트 수 및 해당 프로세스가 속한 클래스 보기 - heap /pid: 힙 정보 보기
jmap ‐dump:format=b,file=app.hprof /pid
jvisualvm 명령을 통해 jvm 시각적 관리 인터페이스를 시작하여 가져오기 분석을 위한 덤프 파일: 클래스 보기
jstack
교착 상태 분석: 교착 상태 코드 작성public class DeadLockTest { private final static Object lock1 = new Object(); private final static Object lock2 = new Object(); public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { synchronized (lock1) { try { System.out.println(Thread.currentThread().getName() + ": get the lock1"); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lock2) { System.out.println(Thread.currentThread().getName() + ": get the lock2"); } } } }).start(); new Thread(new Runnable() { @Override public void run() { synchronized (lock2) { try { System.out.println(Thread.currentThread().getName() + ": get the lock2"); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lock1) { System.out.println(Thread.currentThread().getName() + ": get the lock1"); } } } }).start(); } }"Thread-1" 스레드 이름 prio=5 Priority=5; 0x0000000019aa9000 스레드 ID=0x6c4 스레드에 해당하는 로컬 스레드 식별자입니다. java.lang.Thread.State: BLOCKED 스레드 상태jvisualvm 명령을 시작하고 해당 프로세스를 선택하여 교착 상태 스레드를 확인하세요 Jstack CPU 사용량이 높은 스레드 스택을 분석합니다. 정보CPU 작동을 유지하기 위해 while 루프를 시작합니다1. top -p /pid: 프로세스의 리소스 사용량을 확인합니다 이 프로세스로 인해 CPU 사용량이 거의 100%에 가깝습니다. 2. 프로세스의 각 스레드가 차지하는 리소스를 보려면 H를 누릅니다. 3. CPU가 거의 100%를 사용하는 PID 열을 찾아 스레드 tid가 5027임을 나타내고 이를 16진수로 변환합니다. 13a3 변환기를 통해,4. jstack 명령을 통해 jstack 5026|grep -A 10 13a3을 실행하면 스레드 tid 13a3의 스택 정보를 얻은 다음 CPU를 100% 점유하게 하는 실행 라인 번호를 찾을 수 있습니다. jinfo - jvm 시스템 매개변수 보기 jinfo -flags /pid: jvm 매개변수 보기 jinfo -sysprops /pid: Java 시스템 매개변수 보기
Jstat 힙 메모리 사용량 및 클래스 보기 로딩 수량 정보
jstat -gc /pid : 가비지 수집 통계 S0C: 첫 번째 생존 영역의 크기(KB) S1C: 두 번째 생존 영역의 크기; S1U: 두 번째 생존자 영역 EC: Eden Park의 크기; OC: Old Generation의 크기; Area(메타공간); MU: 메소드 영역의 크기 CCSC: 압축된 클래스 공간 사용 크기 YGC: Young Generation 가비지 수집의 소비 시간 단위 s; FGC: 이전 세대 가비지 수집의 소비 시간, 단위 s GCT: 가비지 수집에 소비된 총 시간, 단위 sjstat -gccapacity/pid: 힙 메모리 통계NGCMN: 신세대의 최소 용량; NGCX: 신세대의 현재 용량; S0C: 첫 번째 생존 영역의 크기; ; EC: Eden Campus의 크기; OGCMX: Old 세대의 최대 용량; OC: 현재 Old 세대의 크기; MCMX: 최대 메타데이터 용량, MC: 현재 메타데이터 공간 크기, CCSMX: 최대 압축 클래스 공간 크기, YGC: 젊은 세대의 GC 수 ; FGC: 이전 세대의 GC 수
jstat -gcnew /pid: 새로운 세대의 가비지 수집 통계 보기
TT: 새로운 세대에서 개체가 살아남는 횟수; 새로운 세대에서 객체가 살아남는 횟수 최대 횟수; DSS: 예상 생존 영역 크기
jstat -gcnewcapacity/pid: 차세대 메모리 용량 보기
S0CMX: 최대 생존 영역 1 크기; : 최대 생존 영역 2 크기; ECMX: 최대 Eden Park 크기
jstat -gcold /pid: 구세대 가비지 수집 통계 보기
jstat -gcoldcapacity/pid: 구세대 메모리 용량 보기
jstat - gcmetacapacity/pid: 메타데이터 공간 통계 보기jstat gc -pid 명령을 통해 Java 애플리케이션의 시작 매개변수를 최적화할 수 있습니다. jstat -gc pid 1000 10(1초마다 명령을 실행하여 총 10회) Eden 영역에 추가될 개체 수를 예측할 수 있습니다. 초당 특정 결과 조정 시간을 사용할 수 있습니다. 실제로 최적화 아이디어는 단순히 각 Young GC 이후에 살아남는 개체를 생존자 영역의 50% 미만으로 만들고 이를 젊은 세대에 유지하는 것입니다. 물체가 노년기에 들어가지 않도록 노력하십시오. 잦은 Full GC가 JVM 성능에 미치는 영향을 방지하려면 Full GC의 빈도를 최소화하세요.
jvm 수준 메모리와 같은 일부 오래된 데이터의 경우 시간이 지남에 따라 점점 더 많은 데이터가 쌓여서 전체 GC가 자주 발생하여 메모리 누수가 발생합니다. LRU 데이터 제거 전략을 구현한 성숙한 캐시 아키텍처인 ehcache를 사용할 수 있습니다.
위 내용은 Java JVM 가상 머신 튜닝 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!