Профилирование приложений Java

Я ищу профилировщик кода Java, который я могу использовать для профилирования моего приложения (его служба, которая работает в бэкэнде) на производстве (так что означает низкий уровень над головой, и он не должен замедлять мое приложение). В первую очередь я хочу вызвать профилирование дерева, то есть если a() вызывает b (), а затем b() вызывает c (), то сколько времени a() b() и c() заняло, как включительно, так и исключительно.

видели jvisualvm и jprofiler, но это не то, что я ищу, потому что я не могу завязать производственное приложение к ним, поскольку это вызовет серьезную проблему с производительностью.

кроме того, я прошел через metrics (https://github.com/dropwizard/metrics), но это не дает мне возможности профилировать дерево вызовов.

Callgrind (http://valgrind.org/docs/manual/cl-manual.html) библиотека типов-это то, что мне нужно, поскольку она дает функциональность профилирования дерева вызовов и расширенные параметры, такие как избежание циклов вызова (рекурсия). Но я не конечно, Callgrind можно использовать на производстве, поскольку он сбрасывает данные при завершении программы.

может ли кто-нибудь предложить хороший профилировщик дерева вызовов для java, который можно использовать на производстве без ущерба для производительности?

4 ответов


посмотри Java Mission Control в сочетании с Самописцам. Начиная с выпуска Oracle JDK 7 Update 40 (7u40), Java Mission Control поставляется в комплекте с HotSpot JVM, поэтому он высоко интегрирован и претендует на небольшое влияние на производительность во время выполнения. Я только начал смотреть на него, и я вижу некоторые функции дерева вызовов.

enter image description here


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

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

полезный профилировщик выборки поставляется с JDK, см. страница hprof в документации java 7. В прежние времена существовали некоторые инструменты графического анализа для трассировки процессора hprof (а не трассировки кучи). Теперь их нет. Однако вы уже можете работать с созданным текстовым файлом.

Я быстро взглянул на материал Java Mission Control, упомянутый выше. Я думаю, что это довольно могучий будет удовлетворять много потребностей, в Белом бумага, говорят, имеет только 2% накладных расходов. Однако это не совсем то, что мне лично нужно или чего я хочу. Для моих приложений лучше иметь" легкое " профилирование, включенное все время.


усилитель Intel XE http://software.intel.com/en-us/intel-vtune-amplifier-xe имеет низкие накладные расходы, если они заметны. Оно использует технологию забора стога для того чтобы уменьшить удар и оно может прикрепиться и отделиться к бежать безостановочные процессы в продукции. Вам даже не нужно иметь источники во время профилирования, вы можете погрузиться в источники позже после просмотра результатов автономной работы.


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

вы можете добавить ведение журнала к методам, которые вас интересуют. Убедитесь,что вы включили отметку времени в журнал; затем вы можете сделать время. Необходимо также настроить структуру ведения журнала для асинхронного ведения журнала, чтобы уменьшить потери производительности.

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

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

посмотреть perfspy (учебник), он может уже сделать из коробки то, что вам нужно.

по теме: