블로그

ej-technologies의 제품 뉴스, 업데이트 및 인사이트입니다.

RSS로 읽어보세요. 이메일로 구독하세요. 에서 팔로우하세요.

JProfiler 16.2: 명령줄에서 프로파일링하기

2026-07-23
Ingo Kegel 작성

JProfiler 16.2는 오프라인 프로파일링을 한층 더 편리하게 만들어 줍니다. "오프라인 프로파일링"은 JProfiler GUI 없이 프로파일링을 수행하는 모드입니다. CI 서버, 컨테이너, 프로덕션 시스템에서 유용합니다. 이전 JProfiler 버전에서는 프로파일링 설정을 명령줄로 에이전트에 전달하려면 JProfiler GUI에서 내보낸 설정 파일을 사용해야 했고, 기록 명령은 Controller API, JProfiler MBean 또는 "jpcontroller" 명령줄 유틸리티를 통해 실행해야 했습니다.

많은 경우 이 워크플로는 불필요하게 복잡합니다. 이제 가장 일반적인 프로파일링 설정과 간단한 자동 기록 시퀀스를 명령줄에서 직접 설정하는 실용적인 방식을 도입했습니다. 바로 -agentpath VM 파라미터, jpenable attach 도구, 그리고 Gradle 및 Ant 프로파일링 태스크에서 설정할 수 있습니다. 이는 자동화 작업을 크게 간소화할 뿐만 아니라, 명령줄의 최신 주민인 AI 에이전트에게도 엄청난 이점을 제공합니다.

단 하나의 VM 파라미터

지금까지는 오프라인 프로파일링을 시작하려면 다음과 같이 해야 했습니다:

-agentpath:...=offline,id=<ID>,config=/path/to/jprofiler_config.xml

설정 파일은 JProfiler GUI가 생성한 XML 문서입니다. 이 파일을 로컬 머신에서 내보내고 대상 머신으로 복사해야 하며, 설정을 변경할 때마다 동기화 상태를 유지해야 합니다. 컨테이너 이미지에서는 이 파일을 마운트해야 합니다.

"10분간 CPU를 기록한 다음 스냅샷을 저장한다"와 같은 계획을 실행하려면 GUI에서 트리거를 구성하거나, 프로그래밍 방식으로 controller API를 사용하거나, jpcontroller 명령줄 유틸리티로 기록을 수동으로 수행해야 합니다. 이러한 오프라인 프로파일링 방식도 계속 지원되지만, 이제는 고급 프로파일링 설정과 트리거에만 필요합니다.

16.2에서는 위의 프로파일링 계획을 VM 파라미터에서 직접 구성할 수 있습니다:

-agentpath:...=offline,callTreeMode=sampling,profile=com.mycorp.,\
   snapshot=/tmp/snapshot.jps,recording=cpu,duration=10m

이렇게 하면 샘플링 방식으로 JVM이 시작되고, 프로파일링이 자체 패키지로 제한되며, 10분간 CPU 데이터가 기록된 다음 스냅샷이 저장됩니다.

사용할 수 있는 프로파일링 설정 파라미터는 다음과 같습니다

  • 호출 트리 모드 (sampling, instrumentation 또는 async)
  • profile, compact, ignore 패키지 필터
  • lineNumbers 옵션

자동 기록 옵션은 다음과 같습니다

  • recording은 cpu, allocation 및 jdbc나 http_server와 같은 프로브 이름을 허용합니다
  • duration은 30s, 10m 또는 1h와 같은 값을 받습니다. 이 파라미터를 생략하면 JVM이 종료될 때까지 기록이 진행되며, 종료 시점에 스냅샷이 저장됩니다.
  • delay는 동일한 시간 값 형식을 사용하므로 애플리케이션을 먼저 워밍업시킬 수 있습니다

이로써 배포 환경에서 프로파일링을 수행하는 방식이 크게 개선됩니다. 컨테이너 이미지에 더 이상 별도의 설정 파일이 필요하지 않고, 프로파일링 설정은 단순히 시작 명령의 일부이거나 JAVA_OPTS 또는 유사한 환경 변수에 포함됩니다. 기록 대상을 변경하려면 이제 설정 파일을 동기화하는 대신 배포 서술자만 수정하면 됩니다.

실행 중인 JVM에 연결하기

새롭게 간소화된 오프라인 프로파일링 절차는 시작 VM 파라미터에만 국한되지 않으며, jpenable 명령줄 유틸리티로 이미 실행 중인 JVM을 프로파일링할 때도 동일하게 작동합니다.

대화형으로 실행하면 풍부한 콘솔이 오프라인 프로파일링 설정과 자동 기록 시퀀스를 단계별로 안내해 줍니다:

jpenable에서 오프라인 프로파일링 구성jpenable에서 오프라인 프로파일링 구성

비대화형으로 사용할 때는 모든 설정을 명령줄 옵션으로 지정할 수 있습니다. 예를 들면 다음과 같습니다:

jpenable --offline --call-tree-mode=sampling --profile=com.mycorp. \
   --snapshot=/tmp/snapshot.jps --recording=cpu:jdbc --duration=5m

빌드 시스템에서의 프로파일링

Gradle 및 Ant 프로파일링 태스크는 태스크 속성을 통해 동일한 기능을 제공합니다:

task run(type: com.jprofiler.gradle.JavaProfile) {
    mainClass = 'com.mycorp.MyMainClass'
    classpath sourceSets.main.runtimeClasspath
    offline = true
    callTreeMode = 'sampling'
    profile = ['com.mycorp.']
    snapshotFile = file('build/snapshots/run.jps')
    recording = ['cpu', 'allocation']
    duration = '10m'
}

이제 CI 작업이 빌드 스크립트에 직접 포함된 구성을 사용해 프로파일링 스냅샷을 빌드 아티팩트로 손쉽게 생성할 수 있습니다.

AI 에이전트

AI 코딩 에이전트는 명령줄에서 작동합니다. 빌드를 실행하고, 테스트를 수행하고, 로그 출력을 읽지만, 마법사를 클릭해 진행하거나 GUI에서 설정 파일을 내보낼 수는 없습니다. 16.2부터는 에이전트가 명령 하나로 명령줄에서 전체 프로파일링 세션을 수행할 수 있습니다. 테스트 호출에 VM 파라미터를 추가하고, JVM이 완료될 때 스냅샷을 저장하도록 한 다음 그 결과를 분석합니다.

스냅샷을 로드하고 핫스팟에서 근본 원인까지 에이전트를 안내하는 16.1의 JProfiler MCP 서버와 결합하면, 이제 측정, 수정, 검증의 전체 루프가 누구도 JProfiler UI를 열지 않고 진행됩니다. 사람은 여전히 .jps 스냅샷 파일을 열어 GUI에서 동일한 스냅샷을 확인할 수 있습니다.

시작하기

JProfiler 16.2는 다운로드 페이지에서 구할 수 있습니다. 인라인 설정의 전체 레퍼런스는 오프라인 프로파일링 문서에 있습니다.

아카이브