Как лучше всего решить проблему сбоя виртуальной машины Java, если выполняются следующие условия:
PS: При сбое виртуальной машины я имею в виду, что виртуальная машина записывает файл дампа, например hs_err_pid1234.log, и завершает работу.
100% чистая Java по-прежнему использует собственный код, который по определению может дать сбой.
@ XL-Plüschhase: не существует конкретной ОС / платформы. У нас есть монтажная база ок. 100000 систем. Лишь небольшая часть систем дает сбой на разных ОС / платформах.




Обновите или замените вашу JVM. Если в настоящее время у вас установлена самая новая версия, попробуйте более старую, или, если у вас нет последней версии, попробуйте выполнить обновление до нее. Может быть, это известная проблема в вашей конкретной версии?
Прочтите файл hs_err_pid1234.log (или другое имя файла журнала ошибок). Обычно там есть подсказки. Следующий шаг зависит от того, что вы обнаружите в журнале.
Да, это может быть ошибка в конкретной версии реализации JVM, которую вы используете, но я также видел проблемы, вызванные фрагментацией памяти в операционной системе. Windows, например, склонна закреплять библиотеки DLL в неподходящих местах и в результате не может выделить непрерывный блок памяти, когда JVM запрашивает это. Другие проблемы с памятью out opf также могут проявляться через аварийные дампы этого типа.
Предполагая, что версия JVM на разных машинах одинакова:
Выясните, чем отличается машина, на которой происходит сбой JVM. Одна и та же версия OS и OS? Например, у нас есть проблемы с падением JVM в определенной версии Red Hat. Мы также обнаружили, что некоторые старые версии Red Hat не справляются с дополнительной памятью должным образом, что приводит к нехватке места подкачки. (Нашим решением было обновить RedHat).
Кроме того, выполняет ли программа точно одно и то же на разных машинах? Это доступ к общей файловой системе? Аналогично ли смонтирована файловая система на ваших машинах (SMB / NFS и т. д.)? Что-то должно быть иначе.
Файл журнала должен дать вам некоторое представление о том, где произошел сбой (например, malloc).
Взгляните на трассировки стека в файле дампа, поскольку они должны рассказать вам, что происходило, когда произошел сбой.
Помимо копания в файле дампа hs_err, я бы также отправил его Sun или тому, кто создал вашу JVM (я полагаю, есть инструкции, как это сделать в верхней части файла?). Это не повредит.
32-битный? 64-битная? Количество оперативной памяти в клиентской машине? процессор? Операционные системы? Посмотрите, есть ли связь между системами. Связь может привести к разгадке. Если ничего не помогает, рассмотрите возможность использования различных основных / дополнительных версий JVM. Кроме того, если проблема ТОЛЬКО началась, можете ли вы добраться до момента (через контроль версий), когда программа не аварийно завершилась? Просмотрите журнал hs_err, вы можете понять, что вызвало сбой. Это может быть версия какой-то другой клиентской библиотеки, которую использует JVM. Наконец, запустите программу в отладке / профиле, и, возможно, вы увидите некоторые симптомы до сбоя (при условии, что вы можете продублировать его).
какая ОС / платформа? (мы знаем, что Java не зависит от платформы :-)