2013-09-01 2 views
15

При профилировании процессорного времени приложения с помощью VisualVM можно увидеть вкладку «Дерево вызовов» после моментального снимка. Но в моем случае дерево вызовов показывает только некоторые классы и методы RMI TCP, но не один класс моего приложения.Как отобразить дерево вызовов в VisualVM?

Как я могу отобразить правильное дерево вызовов?

enter image description here

ответ

9

Возможность

  1. Профилировщика настройка исключая классы. Измените исключение в настройках Profiler.
  2. Ваше приложение простаивало во время работы профайлера. Затем присоедините профилировщик, чтобы программа выполнила код, который вы хотите профилировать.
  3. Возможно, вы профилируете неправильную JVM. RMI упрощает вызов в другую JVM. Возможно, вам нужно профилировать другую сторону этого соединения RMI.

На вкладке «Профайлер» установлен флажок «Настройки». Если вы проверите окно «Настройки», появится еще одна панель, которая позволит вам настроить классы, которые собирает профилировщик.

Вот скриншот. screeshot of jvisualvm with Profiler "Settings" box checked.

+0

Благодарим вас за подсказку настроек. Если я нажму на этот флажок, я увижу профилированные классы, но мне не разрешают их изменять. Текстовые поля не редактируются. Как я могу их редактировать? –

+0

Хорошо, понял. Чтобы остановить настройку, отредактируйте настройки. После того, как я установил правильные классы, я мог видеть правильное дерево вызовов для моего приложения. –

0

Дерево вызовов показывает только темы, которые действительно бежали во время отбора проб/профилирования (не спящих все время) и чей стек следы был не фильтруется полностью. Фильтр устанавливается перед началом выборки или профилирования. При включении «настроек» в правом верхнем углу вы можете настроить фильтр. В случае сэмплера вы также можете настроить частоту дискретизации, которая является компромиссом между производительностью и риском для контроля за состоянием потока. Но может быть, что ваше приложение действительно простаивало во время профилирования. Тогда единственными потоками, которые вы видите, являются потоки RMI, поддерживающие соединение с VisualVM.

2

Как отмечают @Holger, моментальные снимки профайлера/пробоотборника должны показывать только текущие потоки. Тем не менее,, я по личному опыту обнаружил, что выборки снимков иногда показывают больше потоков, которые профилируют.

Кроме того, пробоотборник VisualVM позволяет видеть процессорное время каждого потока в реальном времени (без снятия моментального снимка), независимо от того, работает он, спят, ждут или контролируют.

Я не понимаю, почему это происходит, поскольку профилирование должно быть более точным, чем выборка (see here the difference), но это так.

В целом, я рекомендую вам попробовать пробник и посмотреть, работает ли он.

+0

спасибо. Да, выборка помогла и с выборкой я вижу дерево звонков, которое я хотел увидеть. –