1. 쓰레드 프로파일링#

1.1. 데드락 체크용 샘플 코드#

class A {
	synchronized void foo(B b) {
		String name = Thread.currentThread().getName();
		System.out.println(name + " entered A.foo");
		try {
			Thread.sleep(1000);
		} catch (Exception e) {
			System.out.println("A Interrupted");
		}
		System.out.println(name + " trying to call B.last()");
		b.last();
	}

	synchronized void last() {
		System.out.println("Inside A.last");
	}
}

class B {
	synchronized void bar(A a) {
		String name = Thread.currentThread().getName();
		System.out.println(name + " entered B.bar");
		try {
			Thread.sleep(1000);
		} catch (Exception e) {
			System.out.println("B Interrupted");
		}
		System.out.println(name + " trying to call A.last()");
		a.last();
	}

	synchronized void last() {
		System.out.println("Inside A.last");
	}
}

public class DeadLock implements Runnable {
	A a = new A();
	B b = new B();

	DeadLock() {
		Thread.currentThread().setName("MainThread");
		Thread t = new Thread(this, "RacingThread");
		t.start();
		a.foo(b); // get lock on a in this thread.
		System.out.println("Back in main thread");
	}

	public void run() {
		b.bar(a); // get lock on b in other thread.
		System.out.println("Back in other thread");
	}

	public static void main(String args[]) {
		new DeadLock();
	}
}
http://www.tutorialspoint.com/java/java_thread_deadlock.htm 에서 가져온 소스임

1.2. 세부화면#

1.2.1. Monitor Views의 Current Locking Graph 탭#

Monitor Views 메뉴의 "Current Locking Graph" 탭의 화면이다. 애플리케이션 실행중에 쓰레드가 다른 쓰레드를 잡고 있을때 그 상태를 보여준다. 대부분의 경우에는 잠깐 나왔다가 사라지는 형태로 나오지만 특정 쓰레드간의 데드락이 발생하면 그 상태를 계속 보여주게 된다. 그래프 형태로 보여주기 때문에 보기 쉽다.

1.2.2. Monitor Views의 Current Monitors 탭#

Monitor Views 메뉴의 "Current Monitors" 탭의 화면이다. 앞서 "Current Locking Graph" 탭은 그래프 형태로 보여주지만 여기서는 목록 형태로 보여준다. 주로 볼 내용은 Type, Monitor Class, Waiting Thread, Owning Thread 를 보면 된다. 이 중에서도 Waiting Thread, Owning Thread 두개의 값을 보면 서로 잡고 있는 쓰레드의 정보를 파악할 수 있다.

1.2.3. Monitor Views의 Locking History Graph 탭#

Monitor Views 메뉴의 "Locking History Graph" 탭의 화면이다. 쓰레드를 사용하는 이력을 보여준다. 화면 하단의 이력에서 파란색으로 표기된 부분을 클릭하면 상단에 그 세부내용을 보여준다.

1.2.4. Monitor Views의 Monitor History 탭#

Monitor Views 메뉴의 "Monitor History" 탭의 화면이다. 쓰레드의 가장 최근 상태를 보여준다. 개별 스레드를 선택하고 마우스 메뉴의 "Locking History Graph"로 이동해서 세부정보를 추가로 볼수도 있다.

1.2.5. Thread Views의 Thread History 탭#

Thread Views 메뉴의 "Thread History" 탭의 화면이다. 쓰레드의 목록과 각 스레드의 이력별 상태를 보여준다. 하단에 표기를 하고 있기도 하지만 녹색은 처리중, 노란색은 대기중, 빨간색은 블럭된 상태를 나타낸다.

Add new attachment

Only authorized users are allowed to upload new attachments.

List of attachments

Kind Attachment Name Size Version Date Modified Author Change note
png
t1.PNG 7.8 kB 1 19-Feb-2013 14:27 DongGukLee
png
t2.PNG 13.4 kB 1 19-Feb-2013 14:27 DongGukLee
png
t3.PNG 45.8 kB 1 19-Feb-2013 14:27 DongGukLee
png
t4.PNG 59.4 kB 1 19-Feb-2013 14:27 DongGukLee
png
t5.PNG 69.0 kB 1 19-Feb-2013 14:27 DongGukLee
« This page (revision-9) was last changed on 19-Feb-2013 17:37 by DongGukLee