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 정 보 를 표시 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기