Я работаю с приложением Java на хосте, у которого не хватает памяти, что приводит к сбою JVM.
JVM — это 8. Например, я установил Xms и Xmx на 10240 м на хосте 16 ГБ (под управлением Linux). Со временем я отслеживаю кучу JVM (например, с помощью JMX или агента Java), и использование остается постоянным и в определенных пределах. Сборщик мусора запускается регулярно и выполняет очистку, и ни одно из пространств памяти не имеет тенденции к увеличению с течением времени.
А вот на хостовой ОС слежу за использованием памяти - через ps
- параметры vsize
и size
остаются постоянными, а вот pmem
со временем увеличивается (да и rss
думаю тоже, но только начал за этим следить). pmem достигает 99% использования, а затем jvm не может выделить память и завершает работу. Я подозреваю, что rss
со временем будет увеличиваться (уже начало двигаться в этом направлении).
Является ли это признаком утечки памяти в приложении Java, в котором работает JVM? Я предполагаю, что у самой JVM вряд ли будет утечка памяти. И агент, работающий в -javaagent
, довольно широко используется, так что тоже не думайте, что это он. Будет ли это хорошей догадкой? Если это утечка памяти из-за приложения, что может произойти или как ее найти? Что-то вроде JMX, похоже, ничего не отдает, похоже, что это что-то выделено в памяти, о чем JVM не знает.
Спасибо.