Я должен оптимизировать JAVA-приложение. Это делает некоторые вызовы третьего лица. Мне нужен некоторый хороший инструмент для точного измерения времени, потраченного отдельными вызовами API. Для давания общее представление о сложности - приложение берет файл источника данных, содержащий 1 миллион строк, и требуется приблизительно один час для завершения обработки. Как часть обработки, это делает некоторые вызовы третьего лица (включая некоторые сетевые вызовы). Я должен определить, какие вызовы занимают больше времени затем другие, и на основе этого, узнают способ оптимизировать приложение.
Любые предложения ценились бы.
Я могу порекомендовать JVisualVM . Это отличный инструмент для мониторинга / профилирования, который входит в комплект Oracle / Sun JDK. Просто запустите его, подключитесь к своему приложению и начните профилирование процессора. Вы должны получить отличные гистограммы того, на что потрачено время.
Начало работы с VisualVM содержит отличный скринкаст, показывающий, как с ним работать.
Снимок экрана:
Еще одна более примитивная альтернатива - использовать параметр командной строки -Xprof
:
-Xprof
Профилирует запущенную программу и отправляет данные профилирования в стандартный вывод. Эта опция предоставляется как утилита, которая полезен при разработке программ и не предназначен для использования используется в производственных системах.
Похоже, что обычный профилировщик может оказаться неподходящим инструментом в этом случае, поскольку он ориентирован на измерение времени процессора, затрачиваемого профилируемой программой, а не на внешние API-интерфейсы, которые она вызывает, и они, как правило, требуют больших затрат времени. накладных расходов и сбора большого количества данных, которые, вероятно, перегрузят вашу систему, если оставить ее работать в течение длительного времени.
Если вам действительно нужно собирать данные о производительности за такое долгое время, и в основном для внешних вызовов, то Perf4J , вероятно, лучший инструмент.
В нашем офисе мы ежедневно используем профилировщик YourKit. Он действительно легкий и подходит для большинства случаев использования, связанных с производительностью, которые у нас были.
Но я также использовал Visual VM. Это бесплатно и быстро. Вы можете сначала попробовать Visual VM, прежде чем переходить к YourKit (YourKit не является бесплатным).
visualvm (часть SDK) и Java 7 могут производить подробное профилирование.
Я использую профилировщик в NetBeans (он действительно великолепен и уже встроен, нет необходимости устанавливать подключаемый модуль) или JVisualVM , когда NetBeans не используется.
Я использовал YourKit несколько раз, и мне это очень понравилось. Однако я никогда не описывал длительную операцию.
Одинакова ли обработка для каждой строки? В этом случае размер входного файла не имеет значения. Вы можете профилировать подмножество, чтобы выяснить, какие звонки стоят дорого.