Профилирование Java: узнайте, где потоки проводят время заблокированным - PullRequest
5 голосов
/ 12 ноября 2010

У меня есть многопоточное приложение, которое хорошо масштабируется с самого начала, но работает на сервере с 16 процессорами, как только я превышаю 5 или 6 аппаратных потоков, уровни производительности отключаются.Я подозреваю , что узкое место окружает один из синхронизированных методов.Однако мне нужно убедиться, что это виновный метод, прежде чем я начну погружаться в код и пытаюсь заменить алгоритм на неблокирующий.

Запуск Java с аргументом -Xprof говорит мне, что, как я и ожидал, потоки проводят большую часть своего времени заблокированными.Есть ли способ, которым я могу разбить это на то, сколько времени они проводят заблокированными на конкретный метод ?

Ответы [ 4 ]

1 голос
/ 13 ноября 2010

http://yourkit.com представление монитора скажет вам, какие классы блокировки являются горячими, кто удерживает предполагаемые блокировки и разбивку по экземплярам блокировки и стеку вызывающего. Существует 30-дневный период оценки инструмента.

1 голос
/ 12 ноября 2010

Не могли бы вы попробовать этот метод ?Если он работает на нескольких процессорах, он должен найти проблему, но это большое «если».

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

1 голос
/ 12 ноября 2010

Средство jvisualvm, входящее в комплект JDK, может вам немного помочь, хотя информация о профилировании его процессора довольно ограничена (скорее визуализатор для данных Xprof). Я обычно нахожу это более полезным для профилирования памяти.

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

Или, вы можете добавить сбор статистики в ваш код (например, измерить, сколько времени требуется для выполнения каждого синхронизированного метода, который вы подозреваете, разбив его на время ожидания синхронизации / времени выполнения метода), хотя это намного больше работы .

0 голосов
/ 13 ноября 2010

Eclipse TPTP - еще один очень хороший и бесплатный профилировщик.

...