Java утечка памяти и информация о дампе кучи - PullRequest
0 голосов
/ 22 января 2020

Мы столкнулись с проблемой, связанной с памятью.

Наш монитор сообщает, что наш сервис потребляет 800 МБ памяти.

Мы создали дамп кучи. Однако этот дамп кучи сообщает нам, что общий размер кучи составляет 41 МБ.

enter image description here

Служба Out работает внутри контейнера. Мы много читали о некоторых проблемах, связанных с контейнерами java и docker. Однако мы пытаемся получить больше информации.

Как мы можем получить больше информации, связанной с памятью о java vm?

Есть идеи?

1 Ответ

1 голос
/ 22 января 2020

Большое расхождение между использованием памяти, сообщаемым дампом кучи, и использованием, сообщаемым внешним мониторингом, может быть вызвано несколькими причинами. Вот некоторые вещи, на которые стоит обратить внимание:

  1. Использование памяти JVM состоит не только из кучи Java. Он включает в себя исполняемые и разделяемые библиотеки JVM, metaspace, нативную (mallo c) кучу и сегменты памяти, которые содержат стеки потоков. Он также может включать в себя файлы, отображенные в память, и сегменты памяти, используемые другими процессами.

  2. Память, используемая кучей Java, включает недоступные объекты и пространство, которого в данный момент нет выделены объектам; т.е. свободное пространство кучи.

Как получить дополнительную информацию об использовании памяти Java

Первичным источником является "Java Платформа, стандартная Руководство по устранению неполадок издания ":

  • В разделе Отслеживание собственной памяти объясняется, как использовать jcmd для получения общей картины.
  • JFR Memory Tab обеспечивает оперативный мониторинг Java статистики использования кучи и G C.
  • . Jmap Utility может использоваться для получения кучи и G C информация о конфигурации, гистограммы кучи и статистика загрузчика классов.
  • G C может дать полезную информацию о поведении G C.
...