Очень странно OutOfMemoryError

Как всегда пространное описание проблемы.

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

Профилирование приложения показывает очень большое количество объектов Finalizer, заполняющих кучу. Что ж,мы подумали, что "может быть, это странная проблема, связанная с замедлением потока финализатора", и проверили на предмет уменьшения количества объектов, которые необходимо финализировать (В этом случае собственные дескрипторы JNA ). В любом случае, хорошая идея и уменьшила тысячи новых объектов...

Следующие тесты показали ту же картину, только через час и не так круто. На этот раз финализаторы были получены из потоков FileInput -и FileOutput, которые интенсивно используются на тестовом стенде. Все ресурсы закрыты, но финализаторы больше не чистятся.

Я понятия не имею, почему через 1 или 2 часа (без исключений )кажется, что FinalizerThread внезапно перестает работать. Если мы форсируем System.runFinalization ()вручную в некоторых из наших потоков, профилировщик показывает, что финализаторы очищены. Возобновление теста немедленно вызывает новое выделение кучи для финализаторов.

FinalizerThread все еще там, спрашивая jConsole, что он ЖДЕТ.

РЕДАКТИРОВАТЬ

Во-первых, проверка кучи с помощью HeapAnalyzer не выявила ничего нового/странного. У HeapAnalyzer есть несколько приятных функций, но поначалу у меня были трудности. Я использую jProfiler, который поставляется вместе с хорошими инструментами проверки кучи и останется с ним.

Может быть, мне не хватает некоторых полезных функций в HeapAnalyzer?

Во-вторых, сегодня мы настроили тесты с отладочным соединением вместо профилировщика -система стабильна уже почти 5 часов. Это кажется очень странным сочетанием слишком большого количества финализаторов (, которые были сокращены в первом обзоре ), профилировщика и стратегий VM GC. Поскольку на данный момент все работает нормально, реальных выводов нет...

Спасибо за вклад до сих пор -возможно, вы следите за обновлениями и заинтересованы (теперь, когда у вас может быть больше оснований полагать, что мы не говорим об этом простая программная ошибка ).

12
задан mtraut 4 May 2012 в 12:47
поделиться