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