Java 애플리케이션에서 메모리 사용량을 프로파일링하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/756873

문제

SO에서 이전에도 이에 대해 비슷한 질문을 받은 적이 있다는 것을 알고 있습니다. 하지만 제가 해야 할 일을 정확히 설명하겠습니다.

명령줄 Java 응용 프로그램을 실행하는 테스트 세트가 있고 여기에 메모리 프로파일링을 추가하고 싶습니다.제가 볼 수 있는 한 가지 옵션은 메모리 스냅샷을 제공하는 코드(타사 도구/라이브러리 사용)를 애플리케이션에 추가하는 것입니다.또 다른 옵션은 내 애플리케이션과 JVM을 관리/계측하는 타사 도구를 사용하는 것입니다(이상적으로는 내 코드를 변경할 필요가 없습니다).저는 Valgrind와 같은 것을 생각하고 있지만 Java용입니다.가능하다면 오픈 소스도 제공합니다.

제가 정말로 하고 싶은 것은 메모리 사용량이 정기적으로, 예를 들어 매초마다 모니터링되어 텍스트 파일에 덤프되도록 메모리 테스트를 설정하는 것입니다.그렇게 하면 시간이 지남에 따라 메모리 사용량이 진동/증가/감소하는지 확인할 수 있습니다.또한 최대 및 최소 피크를 계산할 수도 있습니다.

여기 이런 일을 해본 사람이 있나요?

미리 감사드립니다.

도움이 되었습니까?

해결책

JProfiler와 같은 것을 사용하면 JVM에 특정 매개변수를 추가하기만 하면 됩니다.JVMTI를 사용합니다.

나는 당신이 프로파일러와 그들이 당신을 위해 무엇을 할 수 있는지에 대해 읽어야 한다고 생각합니다.또한 JVMTI에 대해서도 읽어볼 것을 제안합니다.

JVM TI(JVMTM 도구 인터페이스)는 도구에서 사용하기 위한 새로운 기본 프로그래밍 인터페이스입니다.이는 상태를 검사하고 JVM(Java Virtual Machine)에서 실행되는 애플리케이션의 실행을 제어하는 ​​방법을 모두 제공합니다.JVM TI는 다음을 포함하되 이에 국한되지 않고 JVM 상태에 액세스해야 하는 모든 도구를 지원합니다.프로파일링, 디버깅, 모니터링, 스레드 분석 및 적용 범위 분석 도구.

메모:JVM TI는 JVMPI(Java Virtual Machine Profiler Interface) 및 JVMDI(Java Virtual Machine Debug Interface)를 대체합니다.JVMPI 및 JVMDI는 J2SETM의 다음 주요 릴리스에서 제거될 예정입니다.

다른 팁

Yourkit 또한 꽤 좋은 프로파일 러가 있습니다

확인 했습니까?

VisualVM 그리고 이클립스-콜리 스토?

시작하기에 좋은 곳은 JVM이 "Java -XrunhProf"를 지원하는지 확인하는 것입니다. 시나리오를보다 복잡하게 만들지 않고 힙 프로파일 링 정보를 생성 할 수 있습니다.

보다 http://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html

당신은 당신이 시작하기에 충분하다는 것을 알 수 있습니다.

여러 프로파일 러와 같은 Yourkit 메모리 할당 추적을위한 API가 있습니다. 여기서 또 다른 옵션은 다음과 같은 모니터링 도구입니다 jxinsight또는 유리 박스 또는 자몬

힙 덤프를 분석하려면일식 메모리 분석기 당신이 얻을 수있는 최고의 도구입니다. 무료 및 오픈 소스이므로 원하는만큼 힙 덤프 분석을 자동화 할 수 있습니다.

나는 일식으로 발전하지만 우수한 프로파일 러를 사용하기 위해 Netbeans가 있습니다. 일부 상업용에 비해 제한적이지만 여전히 대부분의 병목 현상을 발견하기에 충분합니다.

당신이 사용할 수있는 JRCMD Jrockit JVM과 함께 제공되는 명령 줄 유틸리티입니다. Java 프로세스의 PID를 알고 있다면 그냥 할 수 있습니다.

JROCKIt_HOME\bin\jrcmd <pid> print_object_summary

그리고 그것은 당신에게 줄 것입니다 :

31.8% 3198k    41907   -137k [C
11.9% 1196k      300     +0k [B
11.4% 1151k    49118     +6k java/lang/String
 6.1% 612k     5604     +0k java/lang/Class
 4.3% 431k     2388     +0k [I
 3.5% 353k    15097     +0k java/util/HashMap$Entry
 ...

위의 답변 외에도 몇 년 전에 Profiler를 사용하는 것을 즐겼습니다. 그것이 도움이 될지 모르겠습니다.

Dynatrace Production Edition을 추천합니다. 메모리 애플리케이션을 프로파일 링하는 놀라운 도구. 실행 된 거래의 낮은 오버 헤드 및 100%.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top