Что делать, если виртуальная машина Java постоянно дает сбой?

Как лучше всего решить проблему сбоя виртуальной машины Java, если выполняются следующие условия:

  • Нет собственного или стороннего кода. 100% чистая Java
  • Эта же программа работает на многих других системах без каких-либо проблем.

PS: При сбое виртуальной машины я имею в виду, что виртуальная машина записывает файл дампа, например hs_err_pid1234.log, и завершает работу.

какая ОС / платформа? (мы знаем, что Java не зависит от платформы :-)

Blauohr 22.10.2008 14:56

100% чистая Java по-прежнему использует собственный код, который по определению может дать сбой.

Alexander 22.10.2008 17:42

@ XL-Plüschhase: не существует конкретной ОС / платформы. У нас есть монтажная база ок. 100000 систем. Лишь небольшая часть систем дает сбой на разных ОС / платформах.

Horcrux7 23.10.2008 10:47
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
3
3 364
5

Ответы 5

Обновите или замените вашу 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. Наконец, запустите программу в отладке / профиле, и, возможно, вы увидите некоторые симптомы до сбоя (при условии, что вы можете продублировать его).

Другие вопросы по теме