Вопрос по jvm, java – Как генерировать дампы потока, когда JVM завершается автоматически

2

Сценарий проблемы: Проблема замечена в звуковом контейнере MF (jvm). В контейнере размещены некоторые java-сервисы, отвечающие за операции с БД и преобразования сообщений. После запуска контейнер работает нормально в течение 2-3 недель и завершает свою работу без выброса любые исключения.

После долгих исследований мы не можем выяснить, почему или что вызвало отключение jvm (MF Container).

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

Заранее спасибо.

Ваш Ответ

2   ответа
4

java.lang.Runtime.addShutdownHook ()и перехватить перехват всех потоков и сбросить их следы стека с помощьюThread.getAllStackTraces (), Однако, если JVM была закрытаRuntime.halt() тогда крючки не будут вызываться. Более сложным было бы использоватьизмерительные приборы подключиться к звонкамRuntime.exit() а такжеRuntime.halt() (или жеShutdown.sequence()см. правку № 2), чтобы вы могли точно видеть, что происходит во время вызова.

EDIT: Другой способ сделать это было бы установитьМенеджер по безопасности который не обеспечивает никакой безопасности, но который выводит список потоков всякий раз, когдаSecurityManager.checkExit() вызывается, так как обаhalt() а такжеexit() вызвать этот метод менеджера безопасности. Это было бы намного проще, чем с использованием инструментария, и вы могли бы даже создать исключение в дополнение к регистрации того, что делают потоки.

EDIT 2Система, в которой работает JVM, может сообщить JVM о завершении, и в этом случае использование диспетчера безопасности не сработает. Также не будет использование приборов наRuntime.exit() или жеRuntime.halt()поскольку метод, который вызываетсяjava.lang.Shutdown.exit(), И если JVM завершает работу, потому что завершился последний поток демона, тоShutdown.shutdown() вызывается. Но отключение крючковwill работать в любой из этих ситуаций. Таким образом, вы всегда должны использовать ловушки завершения работы, даже если вы также собираетесь использовать диспетчер безопасности или контрольно-измерительные приборы.

Error: User Rate Limit Exceeded
have the hook iterate over all threads and dump their stack tracesError: User Rate Limit Exceeded
0

https://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/hangloop.html & quot; Поиск и устранение неисправностей в процессе зависания или зацикливания & quot;

Однако, по крайней мере, в моем случае, Eclipse зависает и не отвечает ни на одно из них.

Похожие вопросы