Где утечка памяти в этом сценарии Java? - PullRequest
0 голосов
/ 03 июня 2019

Я работаю с приложением Java на хосте, у которого заканчивается память и происходит сбой JVM.

JVM равен 8. Например, я установил Xms и Xmx на 10240m на хосте 16 ГБ (под управлением Linux).Со временем я отслеживаю кучу JVM (например, с помощью JMX или java-агента), и использование остается постоянным и в определенных пределах.GC работает регулярно и очищается, и ни одно из пространств памяти не имеет тенденцию к росту во времени.

Но в операционной системе хоста я отслеживаю использование памяти - через параметры ps - vsize и sizeоставайтесь последовательными, но pmem увеличивается со временем (и я думаю, что rss тоже, но только начал его отслеживать).pmem использует 99%, а затем jvm не может выделить память и завершает работу.Я подозреваю, что rss будет увеличиваться со временем (он уже начал двигаться в этом направлении).

Указывает ли это на утечку памяти в приложении Java, которое выполняет JVM?Я предполагаю, что у самой JVM вряд ли будет утечка памяти.Агент, работающий на -javaagent, довольно широко используется, так что не думайте, что это так.Это будет хорошее предположение?Если это утечка памяти на уровне приложения, что за утечка может быть, или как можно найти ее?Кажется, что-то вроде JMX ничего не дает, похоже, что это что-то выделенное в памяти, о чем JVM не знает.

Спасибо.

1 Ответ

1 голос
/ 03 июня 2019

Боюсь, что вам придется отладить эту проблему, нет способа узнать, что работает на вашем сервере.

Вы можете улучшить ситуацию, предварительно выделив память кучи JVM с помощью опции запуска -Xms10240m. Если -Xms равно -Xmx, размер памяти кучи JVM не изменится.

Поскольку вы работаете на Java 8, вам следует проверить использование памяти Metaspace . По умолчанию ограничения отсутствуют, поэтому потенциально неисправный загрузчик классов может вызвать утечку памяти. Вы можете установить -XX:MaxMetaspaceSize=512m параметр запуска.

Третьим возможным виновником может стать сторонняя библиотека, которая использует память вне кучи, например, некоторые библиотеки кеша обращаются к памяти непосредственно вне кучи JVM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...