2009-09-08 1 views
4

У нас есть производственная система, идущая в бесконечную петлю полного gc, а капли памяти составляют 8 концертов, как 1 МБ всего за 2 минуты.Кусковые классы корня кучи

После взятия дампа кучи он сообщает мне, что существует массив java.lang.Object ([Ljava.lang.Object) с миллионами объектов java.lang.String, имеющих одну и ту же строку, принимающую 99% кучи.

Но это не говорит мне, какой класс ссылается на этот массив, чтобы я мог исправить его в коде.

Я взял кучу кучи, используя jmap-инструмент на JDK 6 и использовал JProfiler, NetBeans, SAP Memory Analyzer и IBM Memory Analyzer, но никто из них не сказал мне, что вызывает этот огромный массив объектов? ... вроде того, какой класс ссылается на него или содержит его.

Должен ли я взять другой дамп с другой конфигурацией, чтобы получить эту информацию? ... Или что-то еще, что может помочь мне узнать, что виновник вызывает это ... это очень поможет.

ответ

3

Я использовал анализатор памяти SAP в прошлом, и это действительно отличный инструмент для поиска «Жадных папинов памяти».

Возможно, следующая презентация может помочь: Effective Java Heap Memory Analysis on Enterprise-Scale.

+0

Я использовал YourKit и привязал его к одному из производственных узлов и смог получить полный кучей дампов со ссылками. Thx для предложения. –

0

Вы пытались просто grep эту строку через источники и классы?

+0

Yep .. но его некоторое входное значение передается. –

1

Раньше я использовал Eclipse Memory Analyzer, чтобы найти проблемы, подобные этому. Обычно, когда это что-то прямое, довольно легко найти виновника, но это требует некоторого привыкания к условиям. Без фактического сброса в руке я не могу сказать вам, что может вызвать эту проблему. Возможно, вам стоит взглянуть на то, что на самом деле содержит эта строка, откуда она взялась?

Смежные вопросы