Как отладки SegFaults, возникающих в JVM, когда он запускает мой код?

Моя приложение Java наступила регулярно с помощью SIGSEGV и сбросом данных стека и нагрузки информации в текстовом файле.

Я отладил программы C в GDB, и я отладил код Java из моего IDE. Я не уверен, как приблизиться к C-подобным авариям в бегущей программе Java.

Я предполагаю, что я не смотрю на ошибку JVM здесь. Другие программы Java работают просто хорошо, а JVM от солнца, вероятно, более стабильна, чем мой код. Однако я понятия не имею, как я мог даже вызвать SegFaults с кодом Java. Доступно ли доступна память, и когда я последний раз проверил в профилировке, использование кучи было около 50% со случайными шипами около 80%. Есть ли какие-либо параметры запуска, которые я мог бы расследовать? Что такое хороший контрольный список при приближении к такой ошибке?

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

ETA: некоторые из деталей горы

(я ищу общий подход, поскольку фактическая проблема может быть очень специфичной. Тем не менее, есть некоторая информация, которую я уже собрал, и это может иметь некоторую ценность.)

Данное назад у меня была похожая проблема после обновления моего сервера CI (см. здесь для более подробной информации), но это исправление (настройка -xx: maxpermsize ) не помогло не помогло в это время.

Дальнейшее расследование показало, что в файлах журнала аварийки резьба, помеченная как «текущий поток», никогда не является одной из моих моих, но и один под названием «VMThread» или один под названием «GCTaskTashThTread» - i F, это последний, он дополнительно отмечен С комментарием «(вышел)», если это первое, GCTaskThread не в списке. Это заставляет меня предположить, что проблема может быть в конце операции GC.

16
задан Cœur 16 April 2017 в 08:44
поделиться