2017-12-19 3 views
1

원시 메모리가 부족한 가상 서버 (VM)에 문제가 있습니다. 이러한 VM을 실행 : 리눅스 7.2 (Maipo) 제이보스는 9.0.1 자바 1.8.0._151 (. 다른 JVM에 다른 힙 크기를 가지고 그들은 2G에 0.5G 범위) JVM을의 인수는 실행 :Java 8에서 Wildfly 9를 실행하는 동안 VM이 충돌 할 때까지 메모리 사용량이 증가합니다

-XX:+UseG1GC 
-XX:SurvivorRatio=1 
-XX:NewRatio=2 
-XX:MaxTenuringThreshold=15 
-XX:-UseAdaptiveSizePolicy 
-XX:G1HeapRegionSize=16m 
-XX:MaxMetaspaceSize=256m 
-XX:CompressedClassSpaceSize=64m 
-javaagent:/<path to new relic.jar> 

약 한 달이 지나면 VM이 스왑 공간을 모두 사용하기 시작합니다. 결국 OOM-Killer는 Java가 너무 많은 메모리를 사용하여 JVM 중 하나를 죽인다는 사실을 알게됩니다.

메모리의 양이 자바 프로세스에서 사용되는 힙보다 큰 + metaSpace + -XX를 사용하여 계시 압축 : NativeMemoryTracking = 세부

이 기본 메모리에 무엇인지 말해 줄 수있는 도구 (가 있습니까 힙 덤프와 같지만 힙은 아님)?

jemalloc이 아닌 원시 메모리 사용 (힙 외부)에 Java 힙 사용을 맵핑 할 수있는 도구가 있습니까? jemalloc을 사용하여이 작업을 시도했지만 그려진 그래프에는 16 진수 값과 사람이 읽을 수없는 클래스 이름 만 포함되어 있으므로 실제로 아무것도 얻을 수 없습니다. 어쩌면 내가 뭔가 잘못하고 있거나 다른 도구가 필요할 수도 있습니다.

의견을 보내 주시면 대단히 감사하겠습니다.

+0

네이티브 bytebuffers는 아마도? – Holger

답변

0

jcmd를 사용할 수 있습니다. -XX와

  1. 시작 응용 프로그램 : NativeMemoryTracking = 요약 또는 - XX : NativeMemoryTracking = 세부 사항

  2. 사용

는 "PID jcmd (기본 메모리 추적기)를 NMT를 모니터링 할 수 jcmd "VM.native_memory baseline // 기본 작업 수행

jcmd"pid "VM.native_memory detail.diff // 자세한 분석 필요에 따라 사용하십시오. 기본 메모리에서 기본 메모리로 변경

관련 문제