Я использую команду ниже, чтобы получить дамп кучи
jmap -dump:live,format=b,file=/tmp/heap2.bin <pid>
ВМ выбирает:
-Xms2g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=1500
-XX:G1HeapRegionSize=2 -XX:+PrintFlagsFinal -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2
But this command generates 300+ MB bin heap dump file for process running with 1.2 GB memory
(в столбце RES команды top показано 1,2 ГБ памяти)
EDIT: я удалил параметр :live после предложения @kdgregory, но дамп кучи не создается из-за проблемы G1GC
(связанный вопрос SE: Ошибка дампа кучи Java с командой jmap: преждевременный EOF)
Мои запросы:
Как получить полный дамп процесса с помощью других алгоритмов GC, таких как CMS?
Как получить дамп кучи вместе с памятью PermGen? (permstat из командной строки для меня бесполезен). Меня также интересует анализ ошибки PermGen OutOfMemory.
live
; это в документации - person kdgregory   schedule 03.12.2015live
? Потому что это лишило бы смысла этот необязательный параметр (т. е. все дампы содержали бы только живые объекты). - person kdgregory   schedule 03.12.2015/proc/{pid}/mem
, чтобы увидеть, как отображается память процесса. - person Peter Lawrey   schedule 11.07.2016