jconsole, jstat, jmap, jstack, gc
도구 jconsole 로 보기:
명령 직접 실행: jconsole 을 통 해 gc 를 수 동 으로 실행 하고 잠 금 을 감지 하 며 메모리 정 보 를 볼 수 있 습 니 다.
1. 자물쇠 분석:
참고 자료 (http://www.cnblogs.com/ilahsa/archive/2013/06/03/3115410.html)
아 날로 그 잠 금 코드: DemoServiceImpl. 자바
package com.tch.test.dubbo_service_provider.serviceImpl;
import com.tch.test.dubbo_service_model.service.DemoService;
public class DemoServiceImpl implements DemoService {
private Object resource1 = new Object();
private Object resource2 = new Object();
public String sayHello(String name) {
deadLock();
return "Hello " + name;
}
public void deadLock(){
lockResource1();
lockResource2();
}
private void lockResource1() {
new Thread(new Runnable() {
public void run() {
synchronized(resource1){
System.out.println(Thread.currentThread().getId() + ": i have get the lock of resource1");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getId() + ": i begin to get the lock of resource2");
synchronized(resource2){
System.out.println(Thread.currentThread().getId() + ": i have get the lock of resource2");
}
}
}
}).start();
}
private void lockResource2() {
new Thread(new Runnable() {
public void run() {
synchronized(resource2){
System.out.println(Thread.currentThread().getId() + ": i have get the lock of resource2");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getId() + ": i begin to get the lock of resource1");
synchronized(resource1){
System.out.println(Thread.currentThread().getId() + ": i have get the lock of resource1");
}
}
}
}).start();
}
}
명령 실행:
jps
자바 프로 세 스 를 보 여 줍 니 다. 그 중에서 5900 Jps 는 우리 가 jps 를 실행 하 는 프로 세 스 이 고 6464 Provider 는 우리 프로그램의 프로 세 스 이 며 6464 는 우리 가 필요 로 하 는 프로 세 스 번호 입 니 다.
6464 Provider
2712
5900 Jps
그리고 실행: jstack - l 6464
많은 정보 가 표 시 됩 니 다. 그 중에서 정보의 마지막 은:
Found one Java-level deadlock:
=============================
"Thread-2":
waiting to lock monitor 0x0000000057437088 (object 0x00000000d5db1d70, a java.lang.Object),
which is held by "Thread-1"
"Thread-1":
waiting to lock monitor 0x0000000057436b08 (object 0x00000000d5db1d80, a java.lang.Object),
which is held by "Thread-2"
Java stack information for the threads listed above:
===================================================
"Thread-2":
at com.tch.test.dubbo_service_provider.serviceImpl.DemoServiceImpl$2.run(DemoServiceImpl.java:52)
- waiting to lock <0x00000000d5db1d70> (a java.lang.Object)
- locked <0x00000000d5db1d80> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:745)
"Thread-1":
at com.tch.test.dubbo_service_provider.serviceImpl.DemoServiceImpl$1.run(DemoServiceImpl.java:33)
- waiting to lock <0x00000000d5db1d80> (a java.lang.Object)
- locked <0x00000000d5db1d70> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:745)
Found 1 deadlock.
자물쇠 의 위 치 를 명확 하 게 보 여 줍 니 다...
2. 프로그램의 메모리 정 보 를 봅 니 다.
참고 자료 (http://liudaoru.iteye.com/blog/540772)
실행: jmap - dump: format = b, file = dumpFile. bin 6464
현재 디 렉 터 리 에 파일 생 성: dumpFile. bin, 응용 프로그램 (jps 에 표 시 된 프로 세 스 번호: 6464) 메모리 정보, 어떤 대상 이 포함 되 어 있 는 지 등 을 볼 수 있 습 니 다.
그러나 이 파일 은 바 이 너 리 파일 입 니 다. 통과 해 야 합 니 다:
jhat dumpFile. bin, 그리고 브 라 우 저 주소:http://localhost:7000/응용 프로그램의 메모리 정 보 를 볼 수 있 습 니 다.
3. 프로그램 GC 정보 보기:
참고 자료 (http://www.cnblogs.com/alipayhutu/archive/2012/08/20/2647353.html)
명령 실행:
jstat -gc 6464 3000
3 초 간격 으로 프로그램의 GC 정 보 를 표시 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Zabbix】jstat에서 java 힙 영역(heap memory)을 감시하게 되었다◆한 일 · 감시 대상 서버에서 jstat를 사용하여 gc 로그를 기반으로 Old 영역의 사용률을 출력하는 스크립트 작성 · 스크립트를 cron 설정으로 1분 간격으로 기동시킨다 ・Old영역의 사용률이 90%를 넘으...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.