отладка JBoss 100% использование ЦП

энергия иногда запутывается о форматировании, особенно если у Вас есть очень длинный файл. Можно иногда фиксировать его нажимающим ctrl-l, но иначе, необходимо жить с ошибкой.

1
задан 13 March 2010 в 01:21
2 ответа

Можно отправить сигнал SIGQUIT в рабочую JVM для получения stacktraces каждого потока, распечатанного к stdout. Это не уничтожает процесс, хотя я думаю, что он действительно помещает все потоки для сна, в то время как отслеживания стека печатаются.

Затем коррелируйте идентификаторы потока, перечисленные с Вашим предпочтительным методом наблюдения мудрой потоком загрузки ЦП. prstat -L для Соляриса, top -H для Linux. Обратите внимание, что tid's в отслеживаниях стека Java печатается в шестнадцатеричном; необходимо будет, вероятно, преобразовать в десятичное число когда по сравнению с выводом prstat или вершиной.

2
ответ дан 3 December 2019 в 19:50
  • 1
    У меня есть инструменты, готовые отлаживать проблему в следующий раз, когда это происходит в производстве. Этот клиент использует Windows (don' t спрашивают). Я закончил тем, что использовал CDB, инструмент Windows, для получения всего времени распараллеливают использование ЦП и собственные идентификаторы. У меня есть сценарий для выполнения этого дважды с 10 секундами между выполнениями, потоки, которые изменяются больше всего, являются преступниками. Затем я выполняю jstack от JDK для получения потока stacktraces, включая собственные идентификаторы. Теперь нам просто нужно производство к супу снова!:) –  Nate 19 March 2010 в 10:18

Я делаю дамп потока. Однако в моих Производственных системах это не может быть сделано, если JVM не запускается с определенных параметров, которые мы никогда не включали бы в Производстве. В этом случае я использую jboss.system:type=ServerInfo mbean консоли JMX, чтобы сделать дамп потока (listThreadDump ()).

Вывод дампа потока главным образом бессмыслен мне, когда я не написал код. Но человек, который написал код, может понимать его. В этих случаях, где дампы потока не помогают, я предпочитаю использовать"strace -fp <PID of JBoss' java process> -o outfile.txt"чтобы иметь другое представление в то, что происходит на уровне системного вызова. Это немного похоже на питье от пожарного шланга, но иногда это помогает.

1
ответ дан 3 December 2019 в 19:50
  • 1
    Java является многопоточностью, и strace не соединится со всеми потоками, если процесс будет уже запущен. Однако возможно найти поток, который использует 100% ЦП при помощи top -Hp <java_PID>, и затем после нахождения PIO потока работают strace -fp <thread_pid> -o outfile.txt –  Mircea Vutcovici 16 March 2010 в 01:52

Теги

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