Как профилировать количество сгенерированных исключений, классифицируемых по классу исключений или строке кода - PullRequest
3 голосов
/ 10 февраля 2020

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

Как я могу отследить, какой тип генерируется исключение, и где в исходном коде оно генерируется, чтобы я мог посмотреть, смогу ли я самостоятельно исправить сторонний код?

Java Mission Control не показывает разбивки типов исключений или источники, насколько я вижу.

Пожалуйста, не рекомендуйте дорогие коммерческие профилировщики, так как это для проекта с открытым исходным кодом.

Ответы [ 2 ]

4 голосов
/ 10 февраля 2020

Java Насколько мне известно, Mission Control не показывает разбивки типов исключений или источников.

Это неверно, Java Mission Control действительно обеспечивает эта информация.

Сначала необходимо включить отслеживание исключений в Flight Recorder (по умолчанию отслеживаются только java .lang.Error потомки).

См. снимок экрана настроек регистратора полета ниже.

Flight Recorder options

После записи необходимо go для отчета «Исключения».

Там вы найдете разбивку исключений по классам , Представление «Stack Trace» позволит получить точные следы стека.

Mission Control

Я немного JM C live hack: вывести контекстное меню на «Stack Trace» "просмотреть и выбрать" Distin guish Frames By ">" Номер строки "(см. на скриншоте выше). Это позволит вам видеть номера строк.

Если вы предпочитаете инструменты CLI, взгляните на SJK (отказ от ответственности, это мой собственный профилировщик OSS). Например, команда ниже создаст график пламени SVG исключений из вашего дампа JFR. Есть также несколько других типов отчетов.

java -jar sjk.jar ssa -f dump.jfr --jfr-event THROW --flame > throw_flame.svg
2 голосов
/ 10 февраля 2020

Пожалуйста, не рекомендуйте дорогие коммерческие профилировщики, поскольку это для проекта с открытым исходным кодом.

Некоторые коммерческие профилировщики предлагают бесплатные лицензии для проектов с открытым исходным кодом, например JProfiler .

В JProfiler есть пробник, который показывает исключения, сгруппированные по классу исключений с обратными трассами в стеки вызовов, в которые они были брошены.

enter image description here

Отказ от ответственности: Моя компания разрабатывает JProfiler.

...