Почему VisualVm не показывает все потоки в работающем коте? - PullRequest
5 голосов
/ 25 июля 2011

Мой tomcat (версия: 5.5.25) запускает приложение, которое я пытаюсь профилировать с VisualVM (версия: 1.3.2).Все выглядит хорошо, но не все классы и методы показаны в visualVM.Те, которые отсутствуют, запускаются в потоке [main].Я знаю это, потому что это имя потока, которое я получаю, если была достигнута точка останова.Классы, которые работают вне main, например, [worker1], [worker2], ... отображаются правильно.

Есть идеи, каковы могут быть причины?Или что я могу попробовать?

Так как приложение, которое я запускаю (оно называется Assentis Docbase ), является закрытым исходным кодом, они могли настроить конфигурацию Tomcat по умолчанию.Но они позволили мне расширить фреймворк моими собственными классами, и это те, которые я хочу профилировать.

VisualVM Я запускаю с конфигурацией по умолчанию при загрузке.

Ответы [ 4 ]

8 голосов
/ 25 июля 2011

Возможно, вам нужно настроить корневые методы профилирования.См. Профилирование с VisualVM, часть 1 и Профилирование с VisualVM, часть 2 .Вы также можете использовать вкладку «Образец», чтобы получить общее представление о том, что делает ваш Tomcat.

2 голосов
/ 26 июля 2011

Причина, по которой VisualVM не отображал мои вызовы методов в потоке [main], заключается в том, что VisualVM позволяет одновременно профилировать до 32 потоков.Невозможно разрешить просмотр большего количества потоков.Это было задокументировано в Профилировании с помощью VisualVM, часть 2 , раздел «Сравнение с профилировщиком NetBeans», они говорят:

«Предел профилируемых потоков всегда равен 32».

: - (

2 голосов
/ 25 июля 2011

Вот несколько причин, по которым вы не можете видеть «главный» поток:

  • Поток мог завершиться.

  • Поток мог изменить свое имя, вызвав Thread.setName().

Если вы хотите выяснить истинную причину, вам, вероятно, нужно взглянуть на исходный код Tomcat.


На этой странице указано, где находятся настройки. Google твой друг.

0 голосов
/ 25 августа 2017

Возможно, вы неправильно настроили «Начать профилирование с классов» в конфигурации плагина.

Допустим, вы настроили org.acme.competition.* (A) для профилирования:

VisualVM Startup config dialog

но вы случайно профилировали класс org.acme.reference.ReferenceImpl (B), используя следующую команду:

$ cat source.txt | java -Xverify:none \
    -agentpath:/usr/share/visualvm/profiler/lib/deployed/jdk16/linux-amd64/libprofilerinterface.so=/usr/share/visualvm/profiler/lib,5140 \
    -cp bin/ org.acme.reference.ReferenceImpl

, тогда это будет неверный результат:

Wrong result

При настройке конфигурации подключаемого модуля VisualVM «Запуск профилирования из классов» вместо org.acme.reference.* результат будет правильным:

Correct result

См. Руководство по профилированию запуска .

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