주요글: 도커 시작하기
반응형
TPTP가 제공하는 Agent Server를 사용하여 원격지의 JVM을 프로파일링 하는 방법을 살펴본다.

Agent Server 설치

TPTP는 원격지 JVM에 대해서 프로파일 할 수 있는 기능을 제공하는데, 이 기능을 활용하기 위해서는 원격지 호스트에 Agent Server를 설치해야 한다. TPTP는 다양한 OS를 지원하는 Agent Server를 제공하고 있다. 본 글에서는 윈도우 및 리눅스에서 Agent Server를 설치하는 방법에 대해서 살펴보고, 이클립스에 설치한 TPTP에서 원격지 JVM에 접속해서 원격지 자바 어플리케이션을 프로파일링 하는 방법에 대해서 살펴볼 것이다.

윈도우즈 설치

윈도우즈에 Agent Server를 설치하는 과정은 다음과 같다.

  1. AgentServer 설치
    1. 윈도우즈 Agent Server 다운로드: www.eclipse.org/tptp/home/downloads/downloads.php
    2. 임의의 폴더에 압축 해제 (예, c:\win_ia32 )
  2. AgentServer 환경 설정
    1. c:\win_ia32\bin\SetConfig.bat 실행
    2. 사용할 java.exe 실행 파일의 전체 경로 입력
    3. 네트워크 Access mode 입력 (원격지에서 접속하므로 ALL 입력)
    4. Security enabled 입력 (기본값 사용)
    5. 나머지 옵션은 기본값 사용
리눅스 설치

  1. AgentServer 설치
    1. 리눅스 Agent Server 다운로드: www.eclipse.org/tptp/home/downloads/downloads.php
    2. 임의의 폴더에 압축 해제 (예, /usr/local/linux_ia32)
    3. chmod +x /usr/local/linux_ia32/lib/*
    4. chmod +x /usr/local/linux_ia32/bin/*
    5. export PATH=/usr/local/jdk1.5/jre/bin:$PATH
  2. AgentServer 환경 설정
    1. bin/SetConfig.sh 실행
    2. 사용할 $JAVA_HOME/jre/bin/java 실행 파일의 전체 경로 입력
    3. 네트워크 Access mode 입력 (원격지에서 접속하므로 ALL 입력)
    4. Security enabled 입력 (기본값 사용)
    5. 나머지 옵션은 기본값 사용
  3. AgentServer 테스트
    1. bin/RAStart.sh
    2. bin/RAStop.sh
위 과정을 수행하는 도중에 ibxerces-c.so와 관련된 에러가 발생할 경우 아래와 같은 조취를 취한다.

    $ cd /usr/local/linux_ia32/lib
    $ rm libxerces-c.so libxerces-c.so.26
    $ ln -s libxerces-c.so.26.0 libxerces-c.so
    $ ln -s libxerces-c.so.26.0 libxerces-c.so.26

TPTP를 사용한 원격지 JVM 프로파일링

외부에서 현재 호스트의 JVM을 프로파일링 할 수 있도록 하려면 아래의 순서에 따라 자바 어플리케이션을 실행하면 된다.

  1. Agent Server 실행
  2. Agent Server를 사용하여 프로파일링 할 자바 어플리케이션 실행
  3. 이클립스 TPTP에서 Agent Server가 실행중인 원격 호스트에 접속
  4. 프로파일링 시작
Agent Server 및 자바 어플리케이션 실행

원격지에 있는 이클립스 TPTP에서 로컬 호스트에서 실행중인 JVM을 프로파일링 하기 위해서는 먼저 Agent Server를 실행해주어야 한다. Agent Server가 실행되면 그 다음으로 할 일은 Agent Server를 기반으로 자바 어플리케이션을 실행하는 것이다. 이렇게 하면 Agent Server는 해당 자바 어플리케이션과 관련된 JVM을 프로파일링 할 수 있게 되며, 원격지의 이클립스 TPTP는 Agent Server에 접속해서 해당 JVM의 프로파일링 정보를 읽어올 수 있게 된다.

윈도우즈에서 Agent Server 및 자바 어플리케이션을 실행하는 과정은 다음과 같다.

  1. AgentServer 실행
    1. c:\win_ia32\bin\ACServer.exe
  2. 자바 어플리케이션 실행
    1. set PATH=c:\win_ia32\bin;%PATH%
    2. set LD_LIBRARY_PATH=c:\win_ia32\lib;%LD_LIBRARY_PATH%
    3. java -XrunpiAgent:server=enabled test.memoryleak.human.HumanTest
리눅스의 경우는 아래와 같다.

  1. AgentServer 실행
    1. /usr/local/linux_ia32/bin/RAStart.sh
  2. 자바 어플리케이션 실행
    1. export LD_LIBRARY_PATH=/usr/local/linux_ia32/lib:$LD_LIBRARY_PATH
    2. java -XrunpiAgent:server=enabled test.memoryleak.human.HumanTest
윈도우즈/리눅스에서 자바 어플리케이션을 실행할 때 -XrunpiAgent:server=enabled 옵션을 설정하였는데, 이 옵션을 지정해줌으로써 자바 어플리케이션이 Agent Server를 기반으로 실행된다. 따라서 Agent Server는 해당 자바 어플리케이션의 프로파일링 정보를 수집할 수 있게 된다.

이클립스 TPTP에서 프로파일링 시작하기

이클립스 TPTP에서 원격지에서 실행중인 자바 어플리케이션을 프로파일링 하기 위해서는 먼저 원격지에서 실행중인 Agent Server에 접속해야 한다. [Run] - [Profile As ...]를 실행한 뒤, Profile 대화창에서 [Attach - Java Process]를 더블 클릭하면 아래 그림과 같은 새로운 연결을 설정할 수 있게 된다.


Host 탭을 선택한 뒤, 우측의 [Add ...] 버튼을 클릭하면 다음과 같이 새로운 호스트를 추가할 수 있는 입력 대화창이 출력된다.


위 그림에서 Host 에는 Agent Server가 실행중인 호스트의 주소를 입력해주면 된다. [Ok] 버튼을 눌러 새로운 호스트를 추가한 다음에는 Agents 탭을 선택한다. 그럼, 아래와 같이 현재 원격지 호스트에서 실행중인 Agent Server 프로세스가 출력된다. (처음에는 Retrieving list ... 라는 메시지가 출력되며, 잠시 후, 아래 그림과 같이 목록이 출력된다.)


여기서 프로파일링할 프로세스를 클릭한 뒤, [>] 버튼을 클릭하면 (또는 프로세스를 더블 클릭하면) 아래와 같이 프로파일링 할 프로세스가 선택된다. 프로세스를 선택한 다음에 할 작업은 'Monitor' 탭을 선택하여 어떤 정보를 프로파일링 할지 선택하는 것이다. 이 부분은 앞서 1부와 2부에서 살펴봤던 내용과 동일하므로 관련 글을 참고하기 바란다.

모든 설정이 완료되면 [Profile] 버튼을 클릭한다. 그러면 원격지 호스트에서 설치된 Agent Server에 연결하게 되고, 잠시 뒤 아래 그림과 같이 TPTP가 Agent Server에 연결된 상태 정보가 출력될 것이다.


위 그림을 보면 <attached> 라고 되어 있는데, 이는 TPTP가 원격지 Agent Server에 연결은 됐지만, 아직 프로파일링을 시작하지는 않았다는 뜻이다. 프로파일링을 시작하기 위해서는 아래 그림과 같이 'Start Monitoring' 메뉴를 통해서 모니터링을 시작해야 한다.


모니터링이 시작되면 원격지 JVM에서 실행중인 메모리, 메소드 실행 등의 정보를 읽어올 수 있게 되며, 앞서 1부와 2부에서 살펴봤던 내용을 바탕으로 원격지 JVM에서 실행중인 어플리케이션의 메모리 누수와 병목 지점을 찾아낼 수 있게 된다.

결론

지금까지 살펴본 TPTP 내용은 자바 객체 및 메모리 변화, 자바 메소드의 실행 정보 등과 같은 자바 어플리케이션의 내부 실행 상황을 모니터링하고 프로파일링하는 것에 대한 내용이었다. 이런 정보를 바탕으로 메모리 누수 및 병목 현상을 발생시키는 코드를 찾아내는 방법을 살펴보았고, 또한 원격지 JVM에 대해서 프로파일링 하는 방법을 살펴보았다. 이를 통해 여러분은 성능에 문제를 발생시키는 코드를 찾아내어 문제를 줄일 수 있는 방법 한 가지를 터득했으리라 생각하고, 앞으로 성능 문제를 줄여 최대한 안정적인 어플리케이션을 만들 수 있는 힘을 얻었기를 바란다.

관련링크:

+ Recent posts