Профилирование WebSphere с hprof для вывода образцов CPU - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь профилировать WebSphere, используя hprof поверх стека IBM (J9 JVM в AIX / Linux). В частности, мне интересны выходные данные процессора из hprof и, в частности, время запуска (с момента запуска WS до его готовности к работе).

Проблема в том, что я не могу получить выходные данные процессора в файле результатов hprof.

Я использую следующий аргумент JVM для настройки hprof: -Xrunhprof:cpu=samples,file=path-to-hprof.txt, для вывода вывода hprof в формате ASCII. Согласно сгенерированному выводу hprof вывод CPU SAMPLES генерируется только при выходе из программы:

Генерируются записи HEAP DUMP, SITES, CPU SAMPLES | TIME и MONITOR DUMP | TIME при выходе из программы.

Итак, для корректного завершения работы WebSphere после его успешного запуска я использую сценарий stopServer.sh и ожидаю, что выходные данные CPU SAMPLES будут присутствовать в файле java.hprof.txt результата после завершения работы, но это не так. .

Что я делаю не так? Есть ли лучший способ использовать hprof с WebSphere и генерировать результаты профилирования процессора? Любая помощь будет высоко ценится!

Редактировать: Я использую WebSphere версии 8.0.0.11 на IBM J9 VM (сборка 2.6, JRE 1.6.0 20150619_253846) на RHEL 7.5.

P.S .: Я также искал способ закрытия WS из графического интерфейса консоли управления, но не смог его найти.

PPS: Тем временем я использую очень хороший инструмент jvmtop с опцией --profile <pid>, но он обеспечивает только частичное понимание и, в отличие от hprof, имеет быть прикрепленным на лету, поэтому некоторые части исполнения будут потеряны.

1 Ответ

0 голосов
/ 17 ноября 2018

Благодаря полезным советам @ kgibm я понял, что я на правильном пути, и вернулся на следующий день, чтобы попробовать еще раз. Удивительно, но на этот раз это сработало! Файл hprof был сгенерирован с ожидаемыми выходными данными о процессорах WebSphere.

Я продолжал экспериментировать, чтобы выяснить, в чем я ошибся. Вот что я думаю произошло:

  1. Сначала у меня была пара собственных агентов, указанных в аргументах JVM WebSphere. Комбинация этих агентов заставила WS работать намного медленнее. Когда я убил WS, прошло несколько секунд между распечаткой сообщения Server server1 stop completed и полным написанием hprof.txt. Я считаю, что я слишком быстро просмотрел hprof.txt до того, как на самом деле был записан вывод сэмплов процессора.

  2. Затем для устранения этой проблемы я добавил параметр doe=n в аргумент hprof. doe обозначает Dump On Exit и по умолчанию y. Только позже я понял, что это, вероятно, неправильно, так как, как указано, выходные данные о процессорах генерируются только при выходе.

Я думаю, что эти две проблемы вместе привели к моей путанице, поэтому, когда я начал чистить, все было в порядке.

Возможно, стоит уточнить в документации hprof , что опция doe=n конфликтует с cpu=samples и, возможно, с другими опциями, которые также пишут при выходе (такого я не видел указание в документах, но, возможно, я его пропустил).

...