Я запускаю JFR при запуске, указав следующие параметры консоли для тестируемой Java-программы:
-Xmx24g -XX:+UnlockCommercialFeatures -XX:+FlightRecorder
-XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true,settings=profile
Выполнение теста занимает 90 секунд.
После открытия дампа JFR в Java Mission Control вкладка «Дерево вызовов» в JMC выглядит следующим образом:
Менее 1 выборки в секунду. Это делает детализацию вкладок «Горячие методы» и «Обзор» практически бесполезной. После первоначального исследования было определено, что для выборки метода установлено значение по умолчанию 10 мс, и, как оказалось, этот неожиданный результат объясняется тем, что ~ 98% из 90 секунд тратится на ожидание ввода-вывода сокета при выполнении различных чтение из другой базы данных, так что я получаю только образцы методов для других ~ 2% времени.
Как можно включить связанные с вводом / выводом выборки во время метода, чтобы помочь найти трассировку, которая тратит больше всего времени на ожидание результатов базы данных? Этот процесс содержит запросы к базе данных в нескольких местах, которые, в свою очередь, вызываются из нескольких других мест, поэтому угадать медленный путь вызова нелегко.