Профилировщик производительности для Java-приложения - PullRequest
25 голосов
/ 14 июня 2010

Мне нужно оптимизировать приложение Java.Это делает некоторые сторонние звонки.Мне нужен хороший инструмент для точного измерения времени, затрачиваемого на отдельные вызовы API.Чтобы дать представление о сложности - приложение берет файл источника данных, содержащий 1 миллион строк, и для его обработки требуется около часа.Как часть обработки, он выполняет некоторые сторонние вызовы (включая некоторые сетевые вызовы).Мне нужно определить, какие вызовы занимают больше времени, чем другие, и на основании этого найти способ оптимизации приложения.

Буду признателен за любые предложения.

Ответы [ 8 ]

28 голосов
/ 14 июня 2010

Я могу порекомендовать JVisualVM .Это отличный инструмент для мониторинга / профилирования, который поставляется вместе с Oracle / Sun JDK.Просто запустите его, подключитесь к вашему приложению и запустите профилирование процессора.Вы должны получить отличные гистограммы о том, где потрачено время.

Начало работы с VisualVM * В 1006 * есть отличный скриншот, показывающий, как с ним работать.

Снимок экрана:

VisualVM screenshot


Еще один элементарный вариант - использовать параметр командной строки -Xprof:

-Xprof

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

7 голосов
/ 14 июня 2010

Я уже несколько раз пользуюсь YourKit и что вполне устраивает.Я, однако, никогда не профилировал длительную операцию.

Одинакова ли обработка для каждой строки?В этом случае размер входного файла не имеет большого значения.Вы можете профилировать подмножество, чтобы выяснить, какие звонки стоят дорого.

5 голосов
/ 17 августа 2015

Просто хотел упомянуть инструмент inspectIT. Недавно он стал полностью открытым исходным кодом (https://github.com/inspectIT/inspectIT).. Он предоставляет полный и подробный график вызовов с контекстной информацией, имеется множество встроенных датчиков для вызовов базы данных, мониторинга http, исключений и т. Д.

Швы идеально подходят для вашего случая использования.

2 голосов
/ 21 июня 2010

Попробуйте программный продукт OPNET Panorama

1 голос
/ 14 июня 2010

В нашем офисе мы ежедневно используем профилировщик YourKit. Он действительно легкий и подходит для большинства случаев использования, связанных с производительностью.

Но я также использовал Visual VM. Это бесплатно и быстро. Вы можете сначала попробовать Visual VM перед тем, как перейти к YourKit (YourKit не является бесплатным).

1 голос
/ 14 июня 2010

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

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

0 голосов
/ 14 июня 2010

Я использую профилировщик в NetBeans (он действительно великолепен и уже встроен, нет необходимости устанавливать плагин) или JVisualVM , когда не используется NetBeans.

0 голосов
/ 14 июня 2010

visualvm (часть SDK) и Java 7 могут производить детальное профилирование.

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