본문 바로가기

Management

[Operations] Heap 덤프 생성 방법

1. 서비스별 Heap 덤프 생성 방법

디렉토리 변경

cd /usr/lib/vmware-vcops/common/lib

 

vROPS 버전에 맞게 Heap 덤프 수집(※ 명령어 실행 전 log4j JAR 파일명과 서비스 포트 번호 확인 필요)

8.0: java -cp "alive_platform.jar:log4j-1.2.17.jar:vrops-jmx-metrics-1.0.jar" com.vmware.vcops.common.JMXCommandExecutor 9005 dumpHeap /storage/db/vcops/heapdump

8.1: java -cp "alive_platform.jar:log4j-api-2.12.0.jar:vrops-jmx-metrics-1.0.jar" com.vmware.vcops.common.JMXCommandExecutor 9004 dumpHeap /storage/db/vcops/heapdump

8.3: java -Djavax.net.ssl.trustStore=NONE -cp "alive_platform.jar:log4j-core-2.12.0.jar:vrops-logging-1.0-SNAPSHOT.jar:log4j-api-2.12.0.jar:vrops-jmx-metrics-1.0.jar:vrops-trustmanager-3.0-SNAPSHOT.jar" com.vmware.vcops.common.JMXCommandExecutor 9005 dumpHeap /storage/db/vcops/heapdump

8.6.2: java -Djavax.net.ssl.trustStore=NONE -cp "alive_platform.jar:log4j-core-2.16.0.jar:vrops-logging-1.0-SNAPSHOT.jar:log4j-api-2.16.0.jar:vrops-jmx-metrics-1.0.jar:vrops-trustmanager-3.0-SNAPSHOT.jar" com.vmware.vcops.common.JMXCommandExecutor 9006 dumpHeap /storage/db/vcops/heapdump

 

Heap 덤프 파일의 md5sum 생성

/storage/db/vcops/heapdump/md5sum heapDump_xxxxxxxxxxxxx.hprof 2>&1 | tee md5sum_output.file

 

Heap 덤프 파일과 md5sum 파일 압축

/storage/db/vcops/heapdump/zip heapdump.zip heapDump_xxxxxxxxxxxxx.hprof md5sum_output.file

 

서비스 포트 번호

  • Analytics: 9004
  • API(REST): 9007
  • Collector: 9005
  • Cassandra: 9008
  • UI (tcServer): 9006

 

예제)

admin@vRealizeClusterNode [ /usr/lib/vmware-vcops/common/lib ]$ java -Djavax.net.ssl.trustStore=NONE -cp "alive_platform.jar:log4j-core-2.17.2.jar:vrops-logging-1.0-SNAPSHOT.jar:log4j-api-2.17.2.jar:vrops-jmx-metrics-1.0.jar:vrops-trustmanager-3.0-SNAPSHOT.jar" com.vmware.vcops.common.JMXCommandExecutor 9006 dumpHeap /storage/db/vcops/heapdump
Parsing cmd
Try to connect to the JMX port - 9006
Successfully connected to the JMX port - 9006
Successfully got mbean server
Generating heapdump at - /storage/db/vcops/heapdump/heapDump_1658747689682.hprof
Succesfully generated heapdump

 

root@vRealizeClusterNode [ /storage/db/vcops/heapdump ]# md5sum heapDump_1658747689682.hprof 2>&1 | tee md5sum_output.file
71fd070cf3b9de913c02008691510b9a heapDump_1658747689682.hprof

 

 

root@vRealizeClusterNode [ /storage/db/vcops/heapdump ]# zip heapdump.zip heapDump_1658747689682.hprof md5sum_output.file
adding: heapDump_1658747689682.hprof (deflated 84%)
adding: md5sum_output.file (stored 0%)

 

 

2. 수집한 Heap Dump 분석

1) EclipseMAT를 PC에 설치합니다. (사전에 JDK가 설치되어 있어야 합니다.)

https://www.eclipse.org/mat/

 

2) 설치 완료 후 EclipseMAT를 실행하고 File > Open Heap Dump 메뉴를 통해 위에서 수집한 확장자 hprof 파일을 선택합니다.

참고:

Eclips MAT로 heap dump open 시 아래와 같은 Error가 발생하며, parsing이 fail될 경우가 있습니다.

An internal error occurred during: "Parsing heap dump from 'C:\Temp\Image data\20230621-SDS-vROPS-issue\java_pid4494.hprof'".
Java heap space

 

이럴 경우 MemoryAnalyzer.ini 파일을 Text editor로 open 하셔서 -Xmx1024m 값을 아래와 같이 수정 후 application을 다시 기동해주시면 됩니다.

-Xmx1024m to -Xmx2048m

참고로 Memory 여유가 된다면 4096이나 8092 등의 값으로 변경하면 빠르게 parsing을 할 수 있다.

 

3) Leak Suspects Report를 선택합니다.

 

4) Overview TAB에서 Actions에 있는 Dominator Tree를 선택하면, 어떤 클래스가 Heap을 얼마나 사용하고 있는지 확인이 가능합니다.