Как всегда пространное описание проблемы.
В настоящее время мы проводим стресс-тестирование нашего продукта -и столкнулись со странной проблемой. Через час-два начинает расти место в куче, через какое-то время приложение умирает.
Профилирование приложения показывает очень большое количество объектов Finalizer, заполняющих кучу. Что ж,мы подумали, что "может быть, это странная проблема, связанная с замедлением потока финализатора", и проверили на предмет уменьшения количества объектов, которые необходимо финализировать (В этом случае собственные дескрипторы JNA ). В любом случае, хорошая идея и уменьшила тысячи новых объектов...
Следующие тесты показали ту же картину, только через час и не так круто. На этот раз финализаторы были получены из потоков FileInput -и FileOutput, которые интенсивно используются на тестовом стенде. Все ресурсы закрыты, но финализаторы больше не чистятся.
Я понятия не имею, почему через 1 или 2 часа (без исключений )кажется, что FinalizerThread внезапно перестает работать. Если мы форсируем System.runFinalization ()вручную в некоторых из наших потоков, профилировщик показывает, что финализаторы очищены. Возобновление теста немедленно вызывает новое выделение кучи для финализаторов.
FinalizerThread все еще там, спрашивая jConsole, что он ЖДЕТ.
РЕДАКТИРОВАТЬ
Во-первых, проверка кучи с помощью HeapAnalyzer не выявила ничего нового/странного. У HeapAnalyzer есть несколько приятных функций, но поначалу у меня были трудности. Я использую jProfiler, который поставляется вместе с хорошими инструментами проверки кучи и останется с ним.
Может быть, мне не хватает некоторых полезных функций в HeapAnalyzer?
Во-вторых, сегодня мы настроили тесты с отладочным соединением вместо профилировщика -система стабильна уже почти 5 часов. Это кажется очень странным сочетанием слишком большого количества финализаторов (, которые были сокращены в первом обзоре ), профилировщика и стратегий VM GC. Поскольку на данный момент все работает нормально, реальных выводов нет...
Спасибо за вклад до сих пор -возможно, вы следите за обновлениями и заинтересованы (теперь, когда у вас может быть больше оснований полагать, что мы не говорим об этом простая программная ошибка ).