프로파일링을 위한 명령줄 실행 파일
JProfiler는 프로파일링 에이전트를 설정하고 명령줄에서 프로파일링 작업을 제어하기 위한 여러 명령줄 도구를 포함하고 있습니다.
실행 중인 JVM에 프로파일링 에이전트 로드하기
명령줄 유틸리티 을 사용하면 버전 6 이상인 모든 실행 중인 JVM에 프로파일링 에이전트를 로드할 수 있습니다. 명령줄 인수를 사용하여
사용자 입력 없이 프로세스를 자동화할 수 있습니다. 지원되는 인수는 다음과 같습니다:
bin/jpenable
사용법: jpenable [옵션] jpenable은 선택된 로컬 JVM에서 프로파일링 에이전트를 시작하여 다른 컴퓨터에서 연결할 수 있도록 합니다. JProfiler GUI가 로컬에서 실행 중인 경우, 이 실행 파일을 실행하는 대신 JProfiler GUI에서 직접 attach할 수 있습니다. * 인수가 주어지지 않으면, jpenable은 아직 프로파일되지 않은 로컬 JVM을 검색하려고 시도하며, 명령줄에서 필요한 모든 입력을 요청합니다. * 다음 인수와 함께 명령줄에서 사용자 입력을 부분적으로 또는 완전히 제공할 수 있습니다: -d --pid=<PID> 프로파일링할 JVM의 PID -n --noinput 어떤 경우에도 사용자 입력을 요청하지 않음 -h --help 이 도움말 표시 --options=<OPT> 에이전트에 전달되는 디버깅 옵션 GUI 모드: (기본값) -g --gui JProfiler GUI를 사용하여 JVM에 attach합니다 -p --port=<nnnnn> JProfiler GUI에서의 연결을 위해 프로파일링 에이전트가 수신 대기할 포트 -a --address=<IP> 프로파일링 에이전트가 수신 대기할 주소입니다. 이 매개변수가 없으면, localhost에서만 attach할 수 있습니다. 모든 주소에서 수신 대기하려면 0.0.0.0을 사용하십시오. 오프라인 모드: -o --offline JVM을 오프라인 모드에서 프로파일링합니다 -c --config=<PATH> 프로파일링 설정이 포함된 구성 파일의 경로 -i --id=<ID> 구성 파일의 세션 ID입니다. 구성 파일에 단일 세션만 포함된 경우 필요하지 않습니다. JVM은 jpenable과 동일한 사용자로 실행되어야 하며, 그렇지 않으면 JProfiler가 연결할 수 없습니다. 예외는 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에 적합합니다.
프로파일링 에이전트 제어하기
실행 파일을 인수 없이 시작하면 로컬 머신의 프로파일된 JVM에 연결을 시도합니다. 여러 프로파일된 JVM이 발견되면 목록에서
하나를 선택할 수 있습니다.
bin/jpcontroller
는 프로파일링 설정이 설정된 JVM에만 연결할 수 있으므로, jpcontroller
-agentpath
VM 매개변수에 대해
"nowait" 옵션으로 JVM이 시작된 경우에는 작동하지 않습니다. 이 옵션은 통합 마법사의 "시작 모드" 화면에서 즉시 시작, 나중에 JProfiler GUI로 연결 라디오 버튼을
선택하고 아직 JProfiler GUI가 에이전트에 연결되지 않은 경우 설정됩니다. 을 jpenable
--offline
인수
없이 사용하는 경우에도 가 프로파일된 프로세스에 연결하기 전에 JProfiler GUI의 연결이 필요합니다.
jpcontroller
원격 컴퓨터의 프로세스에 연결하거나 JVM이 버전 6 이상의 HotSpot JVM이 아닌 경우, VM 매개변수 -Djprofiler.jmxServerPort=[port]
를
프로파일된 JVM에 전달해야 합니다. 해당 포트에서 MBean 서버가 게시되며, 선택한 포트를 의 인수로 지정할 수 있습니다. 추가 VM
매개변수 jpcontroller
-Djprofiler.jmxPasswordFile=[file]
을 사용하여 user password
형식의 키-값 쌍이 포함된 속성
파일을 지정하여 인증을 설정할 수 있습니다 (공백 또는 탭으로 구분). 이러한 VM 매개변수는 com.sun.management.jmxremote.port
VM 매개변수에
의해 재정의된다는 점에 유의하십시오.
JMX 서버의 명시적 설정을 통해 명령줄 컨트롤러를 사용하여 를 호출하여 원격 서버에 연결할 수 있습니다. 원격
컴퓨터가 IP 주소를 통해서만 접근 가능한 경우, jpcontroller host:port
-Djava.rmi.server.hostname=[IP address]
을 원격 VM의 VM 매개변수로 추가해야 합니다.
기본적으로, 는 대화형 명령줄 유틸리티이지만, 수동 입력 없이 프로파일링 세션을 자동화할 수도 있습니다. 자동화된 호출은
jpcontroller
[pid | host:port]
를 전달하여 프로파일된 JVM을 선택하고 --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> 명령은 지정된 초 수만큼 일시 중지합니다. 빈 줄과 #으로 시작하는 줄은 무시됩니다.