Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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.