일반적으로 내가 사용하는 것은 Eclipse Memory Analyzer에ParseHeapDump.sh
포함되어 있으며 여기 에 설명 되어 있으며 더 강화 된 서버 중 하나에서 수행합니다 (linux .zip 배포판을 통해 다운로드 및 복사, 압축 해제). 셸 스크립트는 GUI에서 힙을 구문 분석하는 것보다 적은 리소스가 필요하며 더 많은 리소스를 사용하여 강력한 서버에서 실행할 수 있습니다 ( 스크립트의 마지막 줄 끝에 비슷한 것을 추가하여 더 많은 리소스를 할당 할 수 있습니다 . 예를 들어, 해당 파일의 마지막 줄은 수정 후 다음과 같을 수 있습니다.-vmargs -Xmx40g -XX:-UseGCOverheadLimit
./MemoryAnalyzer -consolelog -application org.eclipse.mat.api.parse "$@" -vmargs -Xmx40g -XX:-UseGCOverheadLimit
그것을 실행 ./path/to/ParseHeapDump.sh ../today_heap_dump/jvm.hprof
성공하면 .hprof 파일 옆에 여러 "인덱스"파일이 생성됩니다.
인덱스를 만든 후에는 보고서를 생성하고 해당 보고서를 내 로컬 컴퓨터로 scp하고 그로 인해 범인을 찾을 수 있는지 확인하려고합니다 (인덱스가 아니라 보고서뿐 아니라). 다음 은 보고서 작성에 대한 자습서입니다 .
예제 보고서 :
./ParseHeapDump.sh ../today_heap_dump/jvm.hprof org.eclipse.mat.api:suspects
기타 보고서 옵션 :
org.eclipse.mat.api:overview
과 org.eclipse.mat.api:top_components
해당 보고서가 충분하지 않고 더 많은 파기를 필요로하는 경우 (예 : oql을 통해), 색인과 hprof 파일을 로컬 머신에 scp 한 다음 힙 덤프를 엽니 다 (인덱스가 동일한 디렉토리에 있음). 내 Eclipse MAT GUI로 힙 덤프). 거기에서 실행하는 데 너무 많은 메모리가 필요하지 않습니다.
편집 :
나는 두 가지 메모를 추가하는 것을 좋아했습니다.
- 내가 아는 한, 인덱스 생성 만이 Eclipse MAT의 메모리 집약적 인 부분입니다. 인덱스가 있으면 Eclipse MAT에서 처리하는 대부분의 경우 그다지 많은 메모리가 필요하지 않습니다.
- 쉘 스크립트에서이 작업을 수행한다는 것은 헤드리스 서버에서 수행 할 수 있다는 것을 의미합니다 (일반적으로 가장 강력한 서버이기 때문에 일반적으로 헤드리스 서버에서도 수행합니다). 그리고 해당 크기의 힙 덤프를 생성 할 수있는 서버가 있다면 그 정도의 힙 덤프도 처리 할 수있는 다른 서버가있을 가능성이 있습니다.
ArrayIndexOutOfBoundsException
최소한 두 가지 버그 의 기능 . 다른 수정 사항이있는 MAT를 실행할 때 OOME을 보고하지 않았기 때문에 이것을 말합니다 .