넷빈(netbeans)6.8에서 프로파일링 - 스레드 진단

0

Written on 오전 6:41 by 강여사(J.Y.Kang)

본 예제에서 제시된 샘플 프로젝트는 다음 경로에 있습니다.

http://docs.google.com/leaf?id=0B55-rdrBfsK5YWUyNGQ3ZGUtYmE4Zi00ZWU3LTk2NDEtMTZjMzFmODM4NWUw&hl=ko

이번에 할 작업은 UI 프로그램에서 스레드 상태를 진단하고 문제가 되는 지점을 찾아 내는 방법에 대해 알아보겠습니다.

프로젝트 열기 (MonitoredThreads)

실행 해당 프로그램은 버튼이 2개 있는 간단한 UI 프로그램입니다.
그러나, 이때 Start! 버튼을 누르게 되면 일정 시간이 지날때까지 아무 것도 동작하지 않습니다.
아래 그림 처럼 경과시간이(30초) 지나야만 기타 다른 버튼 (Exit 혹은 X) 등이 동작합니다.
왜 이런일이 생긴 걸까요?

이제 프로젝트를 프로파일링 해보겠습니다.

프로젝트 - 프로파일

우선 모니터를 선택하여 스레드 모니터링 활성화에 체크(확인)를 하고 실행합니다
프로그램이 시작되면서 뒤편으로 스레드가 상태별로 보여집니다. (각 색상은 해당 상태에 대한 내용입니다. 녹색-실행중, 보라-휴면, 노랑-대기, 빨강-모니터)
그러다 Start버튼을 누르면 이 중 변화하는 스레드가 있습니다.

AWT-EVENTQUEUE-0 입니다. 대기에서 실행으로 바뀌는 군요.

다시 30초가 경과되면 팝업창이 나타나고 그때 스레드 상태 역시 다시 대기상태로 빠집니다.
해당 프로그램을 종료하면 아래 그림과 같은 정보 알림창이 뜹니다. OK
AWT_EVENTQUEUE-0 를 더블클릭하면 해당 스레드에 대한 좀더 자세한 내용이 도식화됩니다.

AWT-EVENTQUERE-0 는 원래 이벤트 큐를 대기하는 일을 담당하는 스레드 입니다.

그럼에도 불구하고 Start! 버튼 클릭시 상태가 실행중으로 바뀌는 바람에 프로그램이 먹통이 된거지요. 이번에는 모니터링이 아니라 분석을 위해 다시 프로파일링을 시작합니다.
CPU 성능 분석을 실행합니다.
스레드 화면이 뒤에 나타나면 아까와 마찬가지로 프로그램에서 Start! 버튼을 눌러 상태 변화를 확인합니다.

프로그램을 종료하면 수행된 결과의 스냅샷을 찍는 정보창이 나타납니다.

예 선택

스냅샷에 AWT-EVENTQUERE-0 에 jButton1ActionPerformed 메소드에서 마우스 오른쪽을 클릭하여 소스로 이동을 선택합니다.
jButton1ActionPerformed 아래 while 문을 살펴보면 잘못 작성되어 있음을 발견할 수 있습니다.
위의 그림에 해당 내용을 주석처리합니다.
프로파일링을 다시 시작합니다.
CPU 성능분석 - 실행
이번에는 Start! 버튼을 눌러도 AWT-EVENTQUEUE-0 상태에는 변화가 없습니다.
물론 다른 버튼을 누르면 바로 반영됩니다. (Exit 나 X)

다시 소스를 열어 아래 주석으로 되어 있는 SwingWorker 부분을 주석 해제를 합니다. (그림 참조)
작성된 SwingWorker.java 의 내용은 같은 패키지 안에 있습니다.
다시 프로파일을 시작합니다.
CPU 성능분석 - 실행
프로그램을 시작했을 때 스레드는 다음과 같습니다.
그러다 Start! 버튼을 누르면 AWT-EVENTQUEUE-0 는 여전히 대기상태로 진행되면서, SwingWorker 스레드가 새로 실행됩니다.
프로그램을 종료하면 스냅샷 찍기에 대한 확인창이 뜹니다.

예 선택
Call Tree 확인
이상 스레드 모니터링에 대한 간단한 예제 였습니다.

계속...

If you enjoyed this post Subscribe to our feed


No Comment

댓글 쓰기