2016-07-04 5 views
0

Мне интересно, можно ли получить Резьбовой дамп во время полного GC.Сброс резьбы во время полного GC

Что я сейчас делаю сейчас,

  • Получить Timestamp/DATESTAMP во время Full GC

  • сравнить его с бревнами и сузить запрос или действие , которые могли бы вызвали его.

Я просто интересно, можно ли для получения Thread Dump во время Full GC.

ответ

1

Вы не можете получить подробную информацию во время GC. Теперь вы можете получить размер различных кучек через jstat, но если ваш полный GC является стоп-миром, это означает, что все остальное остановилось.

Кроме того, если вы могли бы получить эту информацию, это вряд ли будет тем, что вам нужно знать, это всего лишь один случайный образец, поэтому, если только есть одно место, которое запускает gc, например. вызов System.gc() или выделение только одного места, это не будет так полезно.

Если вы хотите узнать, где запускается System.gc(), вы можете использовать инструментарий (или модифицированный класс System) для выполнения трассировки стека, где он явно вызван. Я сделал это раньше и нашел, что это был DGC. https://plumbr.eu/blog/garbage-collection/rmi-enforcing-full-gc-to-run-hourly

Если вы хотите знать, где самая высокая скорость распределения, я предлагаю использовать профилировщик памяти. Для этого нужны инструменты. Он может показывать трассировку стека, где создаются самые/самые большие объекты.

1

Использование -XX:+HeapDumpBeforeFullGC. Кучи кучи также должны содержать стеки потоков, поскольку они являются корнями GC.

+0

Он доступен на Java 8? или он доступен в предыдущих версиях –

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