Профайлер производительности для приложения 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.