Когда JVM дает сбой (segfaults) во время сборки мусора, как я могу узнать, что собиралось?

Я получаю сбои в моей JVM на примерно той же стадии приложения, но с разными трассировками стека в отчете о сбое. Однако это всегда происходит во время сборки мусора.

Поскольку сбой происходит во всех трех JVM, которые я пробовал (OpenJDK 6, Oracle 1.6.0_25 и 1.7.0) и с двумя GC (Parallel Collector и CMS), и это происходит примерно в одной и той же области приложения, я предположил, что если я смогу найти то, что пытался собрать сборщик мусора, я мог бы заметить некоторую особенность в моем коде, которая вызывает этот сбой.

  • Существуют ли какие-либо методы кодирования, которые, как известно, являются проблематичными для GC?
  • Какие методы доступны для диагностики этой проблемы?
  • Могу ли я сделать какие-либо обоснованные предположения о том, где в моем приложении эта проблема возникает?
  • ​​С какими параметрами (настройка сборщика мусора) я могу поиграть, чтобы сузить проблему?
  • Есть ли способ обнаружить (возможно) проблемные данные в дампе кучи?
12
задан Peter Lawrey 19 March 2016 в 18:17
поделиться