Профайлер производительности для приложения Java

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

Любые предложения будут оценены.

Ответ 1

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

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

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

VisualVM screenshot


Еще одна рудиментарная альтернатива - перейти к опции командной строки -Xprof:

-Xprof

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

Ответ 2

Я несколько раз использовал YourKit и что доволен этим. Тем не менее, я никогда не занимался долгой работой.

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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