Как включить методы ввода-вывода в выборку Java Flight Recorder? - PullRequest
4 голосов
/ 28 апреля 2019

Я запускаю JFR при запуске, указав следующие параметры консоли для тестируемой Java-программы:

-Xmx24g -XX:+UnlockCommercialFeatures -XX:+FlightRecorder 
-XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true,settings=profile

Выполнение теста занимает 90 секунд.

После открытия дампа JFR в Java Mission Control вкладка «Дерево вызовов» в JMC выглядит следующим образом:

enter image description here

Менее 1 выборки в секунду. Это делает детализацию вкладок «Горячие методы» и «Обзор» практически бесполезной. После первоначального исследования было определено, что для выборки метода установлено значение по умолчанию 10 мс, и, как оказалось, этот неожиданный результат объясняется тем, что ~ 98% из 90 секунд тратится на ожидание ввода-вывода сокета при выполнении различных чтение из другой базы данных, так что я получаю только образцы методов для других ~ 2% времени.

Как можно включить связанные с вводом / выводом выборки во время метода, чтобы помочь найти трассировку, которая тратит больше всего времени на ожидание результатов базы данных? Этот процесс содержит запросы к базе данных в нескольких местах, которые, в свою очередь, вызываются из нескольких других мест, поэтому угадать медленный путь вызова нелегко.

1 Ответ

3 голосов
/ 29 апреля 2019

Самая низкая частота выборки при выполнении метода в JDK 8 составляет 10 мс, что вы получаете при настройках профиля. Этого должно быть более чем достаточно для 90-секундной записи при условии, что приложение загружено. В JDK 11 была ошибка, из-за которой было слишком мало образцов, но по скриншоту видно, что вы используете более раннюю версию.

Если вы хотите знать, что делает приложение во время ожидания, вам следует взглянуть на вкладку Latency (не Hot Methods) или вкладки Socket Read / Socket Write. Существуют события для чтения гнезда, записи гнезда, блокировки монитора, ожидания монитора и т. Д., Но могут не применяться, если вы используете асинхронный ввод-вывод.

EDIT

enter image description here

...