Утечка памяти на сервере Jetty 8

Снял дамп памяти, проанализировал его анализатором памяти. Он показывает 73% памяти, занятой объектом java.lang.ref.finalizer. Я пошел посмотреть, что находится внутри этого очень большого объекта. Я обнаружил, что это похоже на рекурсивный след объектов. который выглядит ниже

Finalizer
|__ Finalizer (recursive)
|__ java.io.FileInputStream or org.eclipse.jetty.util.resource.FileResource

Внутри FileResource я нашел путь к извлечению файла войны, но не смог найти то, что находится внутри объекта FileInputStream.

Также здесь можно найти скриншоты. https://lh4.googleusercontent.com/-uZTZ031DlqI/UD33kMskuZI/AAAAAAAABYo/eOrqw65k_Mw/s1179/summary.png

https://lh6.googleusercontent.com/-yWBPUV_71js/UD33kAYYDEI/AAAAAAAABYk/J9fF_WwOeO4/s1074/details.png

Пожалуйста, дай мне знать.


person hridayesh    schedule 29.08.2012    source источник


Ответы (1)


Это не утечка как таковая. Прочтите это: http://www.oracle.com/technetwork/articles/javase/finalization-137655.html о механизме финализации в JVM.

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

Или, если возможно, уменьшите использование FileInputStreams.

person Nikem    schedule 30.08.2012
comment
Мы запускаем высоконагруженное веб-приложение на Jetty Server 8, поэтому для этого процесса мы сохранили 2 ГБ памяти. с помощью jmap обнаружил, что память старого поколения быстро заполняется, и мы всегда перезапускаем сервер на 90% старого поколения. Будет ли очищаться при заполнении памяти. Просто переживал за крах сервера. - person hridayesh; 30.08.2012
comment
По правде говоря, странно перезапускать сервер на 90% старого поколения. Вы не доверяете ГК? Или у вас недостаточно памяти для вашего объема данных? Или вы подозреваете утечку памяти? Тогда попробуйте наш инструмент plumbr.eu. - person Nikem; 30.08.2012
comment
Я не знал о Finalizer в Java и подозревал утечку памяти, поэтому перезапустил. Спасибо за разъяснения. Но GC не запускается, пока вся память не будет заполнена. Будет ли GC работать только тогда, когда 100% памяти заполнено объектами Finalizer старого поколения. - person hridayesh; 30.08.2012