넷빈(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 확인
이상 스레드 모니터링에 대한 간단한 예제 였습니다.

계속...



넷빈(netbeans) 6.8에서 프로파일링(profiling) 사용법2 - Advanced

0

Written on 오후 7:21 by 강여사(J.Y.Kang)

프로파일링은 프로젝트의 규모가 클수록 발생하는 오버헤드가 많아지기 때문에 필요한 부분을 적절히 기획하여 실행하는 것이 중요합니다.

앞서 넷빈에서의 프로파일링 기본 사용에 이어 이번에는 좀더 세분화된 방법에 대해 알아보고자 합니다.

1. 이번에 알아볼 내용은 루트 메소드 추가 입니다.

다시 프로파일링 선택

이번에는 CPU 프로파일링에서 전체 어플리케이션이 아닌 부분(Part of application)을 선택하고, 프로파일링을 진행할 Root 메소드를 선택합니다.

루트메소드 선택은 define 링크를 누르면 나타나는 팝업창에 선택가능합니다.

팝업창에서 Add from Project 클릭 루트 메소드 선택

해당 프로젝트(AnagramGame)의 소스쪽의 com.toy.anagrams.lib.WordLibrary 를 체크하고 확인을 누릅니다

위에 선택한 내용이 표시됨을 확인할 수 있습니다. 이러한 루트 메소드의 지정은 아래 노트에도 나오듯이 소스 편집기에서 직접 추가할 수도 있습니다. (편집기에서 오른쪽 마우스 클릭 - 프로파일링- 루트 메소드 추가)
본 창으로 돌아오면 Part of application 버튼 옆에 1 root method ...edit 라고 표시됩니다.

실행 CPU 프로파일링이 진행되면서 게임 프로그램이 시작되고 (뒤쪽의 프로파일링 패널에서 라이브 결과를 누르면 루트 메소드로 지정한 WordLibrary 에서의 프로파일링만 나타나는 걸 확인할 수 있습니다)
역시 게임 프로그램을 종료하면 스냅샷 여부에 대한 확인창이 뜹니다.

예 선택

CPU 스냅샷 입니다.
2. 이번에는 프로파일링 포인트 삽입에 대해 알아보겠습니다.

프로젝트창으로 와서 해당 프로젝트에서 UI를 담당하고 있는 Anagram.java의 소스를 엽니다.

소스의 line 55 에 가면 initComponent() 메소드가 있습니다. 해당 메소드에서 마우스 오른쪽을 클릭하고 profile - insert profiling point 를 선택합니다. 그럼 그림과 같은 새 프로파일링 창이 뜨는데 결과 초기화를 선택하고 다음을 누릅니다.
프로파일링 포인트에 대한 지정 이름과 기타를 확인하고 마침을 누릅니다.
다시 라인 64의 screensize.height 부분에서 위와 같은 방법으로 마우스 오른쪽을 클릭, profile- insert profiling point 를 선택합니다.
이번에는 대상 스냅샷(스냅샷 찍기)를 선택하고 다음을 누릅니다.
역시 해당 내용을 확인하고 마침을 선택합니다.
소스코드로 돌아와보면 그림처럼 파란색으로 2부분이 프로파일링 포인트로 선택되었음을 알 수 있습니다. (이 2부분이 실행될 때 각각 해당 프로파일링(결과초기화/스냅샷 찍기)가 진행될 것입니다.
다시 프로파일링 선택 (profile)
CPU 프로파일링에서 Entire Application (전체 응용 프로그램)으로 바꾸고 아래쪽 프로파일링 포인트 사용을 체크한 후 이 내용을 다시 확인하려면 활동중인 프로파일링 포인트 보기를 클릭하면 아래 그림과 같이 작업된 2개의 포인트가 보입니다.

실행

역시 게임 프로그램이 시작되고 아래 프로파일링 포인트 창이 출력됩니다.

2개의 포인트에서 결과가 각각 오른쪽에 링크로 제공됩니다.
첫번째 보고를 누르면 결과 초기화에 대한 내용이 표시됩니다.
두번째 보고 링크를 누르면 대상 스냅샷에 대한 내용과 함께 스냅샷 바로가기 링크가 나타납니다.
포인트에서 지정된 바에 따라 진행된 스냅샷입니다. (스냅샷 링크 클릭)
맨 위에 initComponent() 에서 마우스 오른쪽을 클릭하면 소스로 이동 메뉴가 있습니다. 클릭
소스편집기에 initComponent() 메소드가 바로 제시됩니다.
이상 프로파일링에 대한 보다 세분화된 방법에 대해 알아봤습니다.

이후로 여러 문제 있는 프로젝트들을 통해 넷빈의 프로파일링이 어떻게 찾아내는 지 하나씩 살펴 보도록 하겠습니다.

계속...^^

넷빈(netbeans)6.8에서 프로파일링(profiling) 사용법 - overview

0

Written on 오후 6:27 by 강여사(J.Y.Kang)

이번 예제는 넷빈에서 프로파일링 하는 방법에 대해 알아보겠습니다.

우선 샘플 프로젝트 생성을 위해 다음과 같이 작업합니다.

프로젝트창에서 - (마우스 오른쪽 클릭)- 새 프로젝트 선택

카테고리에서 샘플- 프로젝트에서 Anagram Game 을 선택합니다

다음

프로젝트 이름과 위치에 대한 지정을 합니다.

저는 프로젝트 이름은 그대로 위치는 c:\ 로 줬습니다.

마침 프로젝트가 만들어지면 바로 실행 합니다.

프로젝트에서 마우스 오른쪽 클릭 - 실행

이 샘플 프로젝트는 언어 맞추기 게임입니다. 위에 엉클어진(스크램블) 단어를 추측하여

아래 텍스트필드에 넣습니다. 아래 그림처럼 틀리면 저런 메시지가..--;

맞으면 이런 메시지가 나옵니다 ^^

new word 버튼을 누르면 새 단어가 나오구요.


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

상위 메뉴에서 profile - 그리고 첫번째 메뉴인 profile Main Project 를 선택합니다.

(아니면 그냥 프로젝트(왼쪽창의 Anagram)에서 마우스 오른쪽을 클릭하면 profile 메뉴가 있습니다. 그걸 눌러서 진행해도 지금은 같습니다 ). 프로파일링이 진행되면서 프로젝트와 시작/종료 등을 일치하고자 build 를 수정하게 됩니다. 이에 대한 알림 메시지고 나중에 원상태로 복귀하려면 프로파일의 Advanced commands - Unintegrate Profiler 메뉴를 선택하면 됩니다.

OK

그럼 맨처음 저렇게 창이 나옵니다. 왼쪽 3개의 큰 버튼이 각각 해당 프로파일링을 선택할 수 있습니다.
모니터를 누르면 모니터 프로파일링을 위해 해당 버튼이 커지고 오른쪽 설정이 나타납니다
역시 아래 메모리 버튼을 누르면 메모리 프로파일링 옵션들이 제시됩니다
그럼 모니터 프로파일링부터 시작하겠습니다. 모니터 버튼을 누르고 오른쪽 설정에 스레드 모니터링 활성화를 체크합니다.

실행

프로파일링 통합으로 게임프로그램이 실행되면서 뒤쪽으로 프로파일러 컨트롤 패널과(왼쪽), 스레드 모니터링(오른쪽)이 나타납니다. 그리고 하단부에는 VM Telemetry 가 3개 overview로 보여집니다.
이번엔 CPU 모니터링을 해보도록 하겠습니다.

다시 profile- profile main project (혹은 프로젝트에서 profile)을 선택합니다. (이 때 이전 프로파일링 세션이 종료되지 않았으면 확인 팝업창이 뜹니다. ok)

이번에는 CPU 버튼을 눌러 CPU 프로파일링을 선택하고 성능 분석에 Entire Application 을 선택합니다.

실행

역시 게임 프로그램이 시작되고 프로파일러 컨트롤 패널(왼쪽)과 스레드 모니터링(오른쪽)이 나타납니다. 현재 비활성되어 있기때문에 작은 아이콘을 누르면 스레드 모니터링이 활성화됩니다.
스레드 모니터링 활성화(뒤쪽)된 그림
프로그램을 종료하면 스냅샷을 찍을 것인지에 대한 확인창이 뜹니다.

예 선택

좀전 CPU 프로파일링에 대한 스냅샷입니다.
마지막으로 메모리 프로파일링에 대해 알아보겠습니다.

profile - profile main project (혹은 프로젝트의 profile 선택)

메모리 모니터링을 누르고 오른쪽 설정에서 객체 생성과 가비지 컬렉션 모두 기록을 선택하고, 할당을 위한 스택 추적 기록을 역시 체크 합니다.

실행

마찬가지로 게임프로그램이 시작되고 뒤편으로 할당 객체들이 나타납니다. (안보이시면 라이브 결과(왼쪽 패널)를 누르시면 됩니다.
프로그램을 종료하면 메모리 프로파일링에 대한 스냅샷 확인창이 뜹니다.

예 선택
스냅샷은 다음과 같습니다.


지금까지 넷빈즈 프로파일링에 대해 개략적으로 살펴 봤습니다.

다음 예제는 이 프로파일링에 대한 세부 설정과 여러 상황별 사용 방법에 대해 살펴보겠습니다.

계속...