Понимание использования памяти Java - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь решить проблему с памятью, которая возникает у меня на серверах Tomcat, и у меня есть несколько вопросов об использовании памяти. Когда я проверяю использование памяти процессами с помощью top, я вижу, что она использует физическую память 1 ГБ, после создания дампа памяти с помощью gdb размер файла ядра составляет 2,5 ГБ, а при анализе файла HPROF, созданного jmap, указывается, что используется 240 МБ.

Итак, если top показывает 1 ГБ, почему файл hprof показывает только 240 МБ, куда ушли 760 МБ?

1 Ответ

0 голосов
/ 15 ноября 2018

Вы пытались запустить Jmap с использованием опции -heap:format?JVM обычно запускает сборщик мусора до получения дампа.

Кроме того, Память JVM - это не просто память кучи.Он содержит код, стек, собственный метод, прямую память, даже потоки не могут свободно использоваться .Вы можете прочитать больше об этом здесь .Просто убедитесь, что все это тоже дополняет.

Я бы предложил использовать VisualVM или yourkit и сравнить память.Кроме того, какой GC вы используете?Некоторые GC обычно не сжимают память кучи после увеличения, но если GC сработал во время heapdump, это могло бы освободить часть памяти (Попробуйте G1GC ).

...