JProfiler 도움말

프로파일링을 위한 명령줄 실행 파일

JProfiler에는 프로파일링 에이전트를 설정하고 명령줄에서 프로파일링 작업을 제어하기 위한 여러 명령줄 도구가 포함되어 있습니다.

실행 중인 JVM에 프로파일링 에이전트 로드

명령줄 유틸리티인 bin/jpenable을 사용하면 버전 8 이상의 실행 중인 모든 JVM에 프로파일링 에이전트를 로드할 수 있습니다. 명령줄 인수를 사용하면 사용자 입력이 필요하지 않도록 프로세스를 자동화할 수 있습니다. 지원되는 인수는 다음과 같습니다:

사용법: jpenable [옵션]

jpenable은 선택한 로컬 JVM에서 프로파일링 에이전트를 시작하여 다른 컴퓨터에서
연결할 수 있게 합니다. JProfiler GUI가 로컬에서 실행 중인 경우, 이 실행 파일을
실행하는 대신 JProfiler GUI에서 직접 attach할 수 있습니다.

* 인수가 없으면 jpenable은 아직 프로파일링되지 않은 로컬 JVM을 검색하고
  명령줄에서 필요한 모든 입력을 요청합니다.
* 다음 인수를 사용하면 명령줄에서 사용자 입력의 일부 또는 전체를
  제공할 수 있습니다:

  -d  --pid=<PID>     프로파일링할 JVM의 PID
  -n  --noinput       어떠한 경우에도 사용자 입력을 요청하지 않음
  -h  --help          이 도움말 표시
      --options=<OPT> 에이전트에 전달되는 디버깅 옵션

  GUI 모드: (기본값)
  -g  --gui           JVM에 attach하는 데 JProfiler GUI가 사용됨
  -p  --port=<nnnnn>  프로파일링 에이전트가 JProfiler GUI의 연결을
                      수신 대기할 포트
  -a  --address=<IP>  프로파일링 에이전트가 수신 대기할 주소. 이
                      파라미터가 없으면 localhost에서만 attach 가능.
                      모든 주소에서 수신 대기하려면 0.0.0.0 사용

  오프라인 모드:
  -o  --offline       JVM이 오프라인 모드로 프로파일링됨
  -c  --config=<PATH> 프로파일링 설정이 포함된 설정 파일 경로
  -i  --id=<ID>       설정 파일의 session ID. 설정 파일에 단일
                      session만 있는 경우 필요하지 않음.

  설정 파일 없는 오프라인 session 설정:
    --call-tree-mode=<sampling|instr|async>
        호출 트리 수집 모드
    --profile=<LIST>
        프로파일링할 패키지 또는 클래스, ':'로 구분
    --compact=<LIST>
        압축할 패키지 또는 클래스, ':'로 구분
    --ignore=<LIST>
        무시할 패키지 또는 클래스, ':'로 구분
    --line-numbers=<true|false>
        줄 번호 기록

  설정 파일 없는 오프라인 자동 녹화:
    --snapshot=<PATH>
        자동 녹화 스냅샷을 이 경로에 저장
    --recording=<LIST>
        녹화할 데이터 유형, ':'로 구분. 스레드와 텔레메트리는
        항상 녹화됩니다. 기본값은 cpu. 값:
        cpu, allocation, jdbc, jpa, mongo_db, cassandra, http_server, http_client, jndi, jms
        kafka_producer, kafka_consumer, rmi, grpc, ai, ws, class_loader, exception, socket, file
        process, gc.
    --duration=<TIME>
        녹화 지속 시간, 예: 30s, 10m 또는 1h. 이 옵션이 없으면
        JVM이 종료될 때까지 녹화가 계속됩니다.
    --delay=<TIME>
        녹화 시작 전 지연 시간, 예: 10s 또는 1m.

JVM은 jpenable과 동일한 사용자로 실행 중이어야 합니다. 그렇지 않으면
JProfiler가 JVM에 연결할 수 없습니다.
예외는 jpenable로 대화형으로 나열할 때 로컬 시스템 계정에서 실행되는 Windows 서비스입니다.

HPROF 스냅샷 저장

힙 스냅샷만 필요한 경우, VM에 프로파일링 에이전트를 로드하지 않고 HPROF 스냅샷을 저장하는 bin/jpdump 명령줄 도구를 사용하는 것을 고려해 보세요:

사용법: jpdump [옵션]

jpdump는 로컬에서 실행 중인 JVM의 힙을 파일로 덤프합니다.
Hotspot VM은 HPROF 파일을 생성하고, OpenJ9 VM은 PHD 파일을 생성합니다.
HPROF 및 PHD 파일은 JProfiler GUI에서 열 수 있습니다.

* 인수가 주어지지 않으면, jpdump는 로컬에서 실행 중인 모든 JVM을 나열합니다.
* 다음 인수로 명령줄에서 사용자 입력을 부분적으로 또는 완전히 제공할 수 있습니다:
  전체 사용자 입력을 명령줄에서 제공할 수 있습니다:

  -p  --pid=<PID>    힙을 덤프할 JVM의 PID
                     PID가 지정되면 추가 질문은 없습니다.
  -a  --all          모든 객체를 저장합니다. 지정하지 않으면, 활성 객체만
                     덤프됩니다
  -f  --file=<PATH>  덤프 파일의 경로. 지정하지 않으면, 덤프 파일은
                     <VM 이름>.hprof로 현재 디렉토리에 작성됩니다.
                     파일이 이미 존재하면, 숫자가 추가됩니다.
  -h  --help         이 도움말 표시

JVM은 jpdump와 동일한 사용자로 실행되어야 하며, 그렇지 않으면
JProfiler가 연결할 수 없습니다.
예외는 jpdump로 대화형으로 나열할 때 로컬 시스템 계정에서 실행되는 Windows 서비스입니다.

이는 프로파일링 에이전트를 로드하고 JProfiler 힙 스냅샷을 저장하는 것보다 오버헤드가 적습니다. 또한 프로파일링 에이전트는 언로드할 수 없으므로, 이 방법은 프로덕션 환경에서 실행 중인 JVM에 적합합니다.

프로파일링 에이전트 제어

인수 없이 bin/jpcontroller 실행 파일을 시작하면 로컬 머신에서 프로파일된 JVM에 연결을 시도합니다. 프로파일된 JVM이 여러 개 발견되면 목록에서 하나를 선택할 수 있습니다.

jpcontroller는 프로파일링 설정이 지정된 JVM에만 연결할 수 있으므로, -agentpath VM 매개변수에 "nowait" 옵션을 지정하여 JVM을 시작한 경우에는 작동하지 않습니다. 이 옵션은 통합 마법사의 "Startup mode" 화면에서 즉시 시작하고 나중에 JProfiler GUI로 연결 라디오 버튼을 선택했고 아직 에이전트에 JProfiler GUI가 연결되지 않은 경우에 설정됩니다. --offline 인수 없이 jpenable을 사용하는 경우에도 jpcontroller가 프로파일된 프로세스에 연결하려면 먼저 JProfiler GUI로부터의 연결이 필요합니다.

원격 컴퓨터의 프로세스에 연결하려 하거나 JVM이 버전 8 이상의 HotSpot JVM이 아닌 경우, 프로파일된 JVM에 -Djprofiler.jmxServerPort=[port] VM 매개변수를 전달해야 합니다. 해당 포트에 MBean 서버가 게시되며, 선택한 포트를 jpcontroller의 인수로 지정할 수 있습니다. 추가 VM 매개변수인 -Djprofiler.jmxPasswordFile=[file]을 사용하면 인증을 설정하기 위해 user password 형식의 키-값 쌍이 포함된 properties 파일을 지정할 수 있습니다(공백 또는 탭으로 구분). 이러한 VM 매개변수는 com.sun.management.jmxremote.port VM 매개변수에 의해 재정의된다는 점에 유의하세요.

JMX 서버를 명시적으로 설정하면 jpcontroller host:port를 실행하여 명령줄 컨트롤러로 원격 서버에 연결할 수 있습니다. 원격 컴퓨터에 IP 주소로만 접근할 수 있는 경우, 원격 VM에 -Djava.rmi.server.hostname=[IP address]을 VM 매개변수로 추가해야 합니다.

기본적으로 jpcontroller는 대화형 명령줄 유틸리티이지만, 수동 입력 없이 프로파일링 세션을 자동화할 수도 있습니다. 자동화된 실행에서는 프로파일된 JVM을 선택하기 위한 [pid | host:port] 및 --non-interactive 인수를 전달합니다. 또한 명령 목록을 표준 입력(stdin) 또는 --command-file 인수로 지정된 명령 파일에서 읽어옵니다. 각 명령은 새 줄에서 시작하며, 빈 줄이나 "#" 주석 문자로 시작하는 줄은 무시됩니다.

이 비대화형 모드를 위한 명령은 JProfiler MBean의 메서드 이름과 동일합니다. 이 명령들은 공백으로 구분된 동일한 개수의 매개변수를 필요로 합니다. 공백이 포함된 문자열은 큰따옴표로 묶어야 합니다. 또한 지정된 초 동안 일시 중지하는 sleep <seconds> 명령도 제공됩니다. 이를 통해 녹화를 시작하고 일정 시간 대기한 후 스냅샷을 디스크에 저장할 수 있습니다.

프로파일링 설정은 프로파일링 에이전트에 설정되어 있어야 합니다. 이는 JProfiler UI로 연결할 때 수행됩니다. JProfiler UI로 전혀 연결하지 않는 경우에는 시작 명령이나 jpenable을 통해 수동으로 설정해야 합니다. 자세한 내용은 시작 시 프로파일링 설정에 대한 도움말 항목을 참조하세요.

jpcontroller에서 지원되는 인수는 아래와 같습니다:

사용법: jpcontroller [옵션] [host:port | pid]

* 인수가 주어지지 않으면, jpcontroller는 프로파일된
   로컬 JVM을 검색하려고 시도합니다
* 단일 숫자가 지정되면, jpcontroller는 프로세스 ID [pid]를 가진 JVM에
   연결을 시도합니다. 해당 JVM이 프로파일되지 않은 경우, jpcontroller는
   연결할 수 없습니다. 그런 경우, 먼저 jpenable 유틸리티를 사용하십시오.
* 그렇지 않으면, jpcontroller는 "host:port"에 연결하며, 여기서 port는
   프로파일된 JVM의 VM 매개변수 -Djprofiler.jmxServerPort=[port]에
   지정된 값입니다.

사용 가능한 옵션:
  -n --non-interactive      명령 목록이 stdin에서 읽혀지는 자동화된 세션을 실행합니다.
  -f --command-file=<PATH>  stdin 대신 파일에서 명령을 읽습니다. 이는
                            --non-interactive와 함께 사용할 수 있습니다.

비대화형 명령의 구문:
  RemoteControllerMBean (https://bit.ly/2DimDN5)의 javadoc을 참조하여
  작업 목록을 확인하십시오. 매개변수는 공백으로 구분되며, 공백이 포함된 경우
  인용부호로 묶어야 합니다. 예를 들어:

    addBookmark "Hello world"
    startCPURecording true
    startProbeRecording builtin.JdbcProbe true true
    sleep 10
    stopCPURecording
    stopProbeRecording builtin.JdbcProbe
    saveSnapshot /path/to/snapshot.jps

  sleep <seconds> 명령은 지정된 초 수만큼 일시 중지합니다.
  빈 줄과 #으로 시작하는 줄은 무시됩니다.