Разное

Профайлер java: Искусство Java-профилирования — JUG.ru

Содержание

Эффективное профилирование Java приложений


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


Данный курс ставит перед собой следующие задачи

  • предоставить аудитории методику эффективного применения инструментов профилирования в контексте решения практических задач
  • продемонстрировать работу с бесплатными профайлерами, идущими
    в комплекте с JDK
    Visual VM, Java Flight Recorder и другими инструментами
  • закрепить знания практической работой со специально подготовленными примерами проблемного кода


Курс включает лекционные блоки и практические упражнения, которые чередуются по мере изложения материала

Ценность курса


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


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


Данный учебный курс даёт разработчику ключевые знания и навыки для эффективного применения профайлера в своей работе.


Курс так же может быть полезен для специалистов в области больших данных (Big Data).

Предполагаемая аудитория

Разработчики / архитекторы Java (всех уровней подготовки), Big Data инженеры, SRE (Site Reliability Engineer).

Список ПО для практической части

Для работы с упражнениями участникам курса необходим компьютер.

Следующее ПО должно быть установлено у участников тренинга.

  • комплект разработки Java (JDK) от Oracle — версия не ниже 8u144
  • Apache Maven — версия не ниже 3.0.5
  • git клиент
  • любая интегрированная среда разработки Java

Может быть использована любая операционная система.

О тренере

Алексей Рагозин — автор курса и тренер, имеет более 10 лет опыта в области разработки высоко нагруженных распределенных систем в различных индустриях. Алексей активный докладчик на российских и зарубежных конференциях в области ПО и контрибьютор в OpenSource.

Курс организован в виде 8 академических пар (90 минут).

Секция 1

Введение. Подход к анализу проблемы сверху вниз. Классификация типовых проблем и дерево принятия решений. Базовая диагностика проблемного приложения с использованием инструментов JDK.

Секция 2

Поиск «горячего кода» методом сэмплирования дампов потоков. Работа с VisualVM. Визуализация результатов сэмплирования: дерево вызовов, инвертированное дерево вызовов, flame graph.

Секция 3

Сброка мусора и его влияние на производительность. Анализ логов сборки мусора. События сборки мусора в Mission Control / Java Flight Recorder. Критерии нормальной работы сборщика мусора.

Секция 4

Анализ содержимого памяти JVM. Использование гистограмм классов для анализа статической и динамической нагрузки на память. Получение дампа памяти JVM и работа с ним. Использование языка запрос OQL для анализа дампов.

Секция 5

Углублённая работа с Java Flight Recorder. Семплирование аллокаций памяти и другие возможности инструмента.

Секция 6

Закрепление темы сэмплирования дампов потоков. Демонстрация смещения оценки характерной для сэмплирования.

Секция 7

Использование трассировки при поиске узких мест. Трассировка с использование Visual VM. Трассировка с помощью BTrace. Анализ проблем многопоточности. Демонстрация различных вариантов межпоточных блокировок (deadlocks) и методы их обнаружения.

Секция 8

Заключительная лекция. Особенности коммуникации промежуточных результатов анализа для нетехнической аудитории. Комбинирование профилирования и других способов исследования.

Какой профилировщик Java лучше: JProfiler или YourKit?

Какой профилировщик лучше подходит для профилирования общего назначения и анализа кучи? 90% наших приложений-это автономные программы командной строки с существенной базой данных и числовой обработкой. Другие 10% — это контейнерные приложения webapps/servlet (с очень небольшим количеством JSP и без СКРИПЛЕТОВ!). Целевым пользователем будет инженер-программист Sr с 39-летним опытом работы в отрасли. Нам нужна поддержка только для Sun JDK 5 и.

На момент написания этого вопроса (2008-10-02) JProfiler был на 5.1.4, а YourKit-на 7. 5. Похоже, скоро выйдет YourKit 8.0.

java

performance

jprofiler

yourkit

Поделиться

Источник


Trenton    

02 октября 2008 в 18:02

1 ответ


  • Jprofiler прошедшее время отличается от фактического времени загрузки

    Мы сталкиваемся со странной проблемой с JProfiler 7.1.1, когда он отображает прошедшее время для данного запроса HTTP, совершенно отличное от полученного с помощью Firebug или ручного теста — 2.5s по сравнению с 7.5s. Используются настройки сеанса по умолчанию. JProfiler всегда доказывал свою…

  • Имеет Ли JProfiler Вид Области Достижимости, Подобный YourKit?

    Я анализирую дамп кучи, созданный jmap. YourKit имеет Reachability scope, который показывает объекты, распределенные в соответствии с их областью достижимости, то есть о том, как/доступны ли они из корней GC http://www.yourkit. com/docs/95/help/достижимость.jsp Мне интересно посмотреть на Objects…



38

Я использовал как JProfiler 4, так и YourKit 7.5, и YourKit выигрывает руки вниз. Это гораздо менее инвазивно, чем JProfile, поскольку я с удовольствием запускаю производственные серверы с установленным агентом YourKit, чего никогда не сделал бы с JProfiler.

Кроме того, инструмент анализа, который поставляется с YourKit, более интуитивно понятен (на мой взгляд), что облегчает поиск первопричины проблем.

Поделиться


skaffman    

02 октября 2008 в 20:32



17

Если вы находитесь на jdk >=1.6_07, вы также можете посмотреть на jvisualvm, который поставляется в комплекте.

Поделиться


Steve B.    

02 октября 2008 в 18:20



16

Недавно использовав как JProfiler, так и Yourkit, я обнаружил, что yourkit намного превосходит анализ проблем с памятью и настоятельно предпочитает jprofiler для анализа производительности. Анализ памяти Yourkit кажется гораздо более простым и интуитивно понятным. Для анализа производительности на yourkit мне не удалось решить ни одной проблемы производительности, которую я пытался решить с помощью yourkit. JProfiler показывает более точную и краткую информацию для анализа производительности с точным количеством вызовов методов и процентом времени, затраченного на каждый метод. Я еще не нашел этого в вашем наборе. Похоже, что yourkit просто дает информацию о выборке, которая не является точной, если вы не измеряете тысячи вызовов.

Поделиться


Jeramyn    

20 мая 2010 в 14:56


  • Изменить Временный Каталог Удаленного Профилировщика YourKit

    Можно ли изменить каталог, в который удаленный профилировщик YourKit помещает свои банки? Мы испытываем это сообщение об ошибке при попытке запустить Tomcat на CloudFoundry (запуск Ubuntu 10.10) с помощью агента профилирования YourKit: Cannot start: failed to create jar file:. ..

  • Расширенное профилирование Java

    В настоящее время наша компания ищет профайлера Java. Мы получили предложение от Compuware (продукт dynaTrace), который способен выдавать такой вид вывода для профилирования CPU (пример): (хорошо, я не могу публиковать изображения, rest вопроса должен быть ясен без этой картинки ) То, что дает вам…



9

Я широко использовал JProbe, OptimizeIt и YourKit, и все они являются эффективными инструментами. Из 3-х моих самых любимых-YourKit.

Единственная убойная функция в JProbe — это возможность перехода от моментального снимка perf к аннотированному источнику (с подсчетами и таймингами). Я нашел это исключительно полезным.

Поделиться


Alex Miller    

03 октября 2008 в 04:32



8

Ни один из инструментов, кроме JXInsight, не выполняет анализ реальных транзакций базы данных:

http://www. jinspired.com/продукты/jxinsight/параллелизма.html
http://www.jinspired.com/продукты/jxinsight/olapvsoltp.html

Технология зондов JXInsight также является единственной, которая может даже работать в производстве, учитывая, что мы выполняем профилировщик netbeans на 20x и yourkit 100x В тестах SPECjvm2008.

http:/ / blog.jinspired.com/? p=272

Я являюсь архитектором JXInsight, поэтому, конечно, я полностью предвзят, но в то же время я, вероятно, более квалифицирован, чем большинство в отрасли Java, чтобы сделать такое заявление, поскольку я посвятил последние 8 лет анализу производительности для некоторых из самых требовательных приложений Java/J2EE в производстве.

Я должен отметить, что JXInsight предназначен для инженеров по производительности программного обеспечения, а не только для случайного сеанса профилирования adhoc. У нас есть более 4000 системных свойств для настройки среды выполнения и более 600 библиотек технологических расширений, так что это может быть излишним, если у вас нет сложной проблемы для решения и/или использование одного и того же инструмента в разработке, тестировании и производстве имеет первостепенное значение.

С уважением,

Уильям

Поделиться


Unknown    

20 октября 2008 в 11:19



7

С Java 7 Update 40, Oracle включил Java mission control (первоначально часть JRockit JDK) — очень мощный инструмент настройки производительности, который способен конкурировать с yourkit/jprofiler.

Взгляните и удивитесь.

Поделиться


MRalwasser    

03 ноября 2013 в 22:45



5

Я использовал и то, и другое, и теперь мой голос определенно JProfiler (в текущей версии 6), так как он проще в использовании и имеет много полезных дополнительных функций. В предыдущих выпусках YourKit имел некоторые преимущества с большими snaphots, но теперь это ушло.

Поделиться


larsk    

15 ноября 2009 в 11:20



4

Определенно YourKit . .. он смог открыть 4 гигабайта кучи дампа с использованием всего 1 г кучи. В то время как Jprofiler с тем же распределением кучи разбился!

Поделиться


Adnan Memon    

12 сентября 2009 в 02:48



3

я использовал yourkit, и это очень хороший профилировщик, лучший из всех, которые я когда-либо использовал в java (за эти годы я использовал множество других). тем не менее, я никогда не использовал jprofiler, поэтому не могу дать прямого сравнения.

Поделиться


james    

02 октября 2008 в 20:18



1

Я использовал YourKit. Я не использовал JProfiler. Я уже использовал OptimizeIt раньше. У меня очень хорошее мнение о YourKit. Это очень стабильный и хороший GUI и хороший список функций. Одна уникальная особенность, которую я заметил, — это профилирование CPU с временем ожидания и без него (например, WAIS ввода-вывода).

Он также стоит очень разумно (около $1100 за 5 лицензий, я думаю)

Поделиться


Rejeev Divakaran    

03 октября 2008 в 03:49



1

YourKit-это здорово. Возможно, вы также захотите проверить профилировщик, встроенный в NetBeans-это довольно круто.

Поделиться


stephmara    

03 октября 2008 в 19:02



1

Отказ от ответственности: альтернативный ответ.

у них есть различные продукты для производственного мониторинга / профилирования UNLIKE другие в основном инструменты времени разработки : http: / / www.jinspired.com / products/jxinsight /

Этот пост на theserverside на JDBInsight : http:/ / www.theserverside.com / news/thread.tss?thread_id=13488

DISCLAIMER : я NOT связан с этой компанией на любом уровне.

Поделиться


anjanb    

02 октября 2008 в 22:02



1

Для быстрого и грязного профилирования программ командной строки JIP работает очень хорошо.

Поделиться


thoroughly    

02 октября 2008 в 18:41



1

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

Поделиться


Javamann    

02 октября 2008 в 20:26



1

Yourkit
Он имеет низкие накладные расходы, стабилен, прост в установке на профилируемый JVM (всего один dll) и мощный.
Для анализа дампов кучи это единственный профилировщик, который приближается к анализатору памяти Eclipse .

Поделиться


kohlerm    

10 октября 2008 в 15:15



0

Я использую JProfiler и нахожу его в целом OK. Однако эта функция «dynamical instrumentation» ужасно предвзята для небольших методов.

Поделиться


quant_dev    

14 июня 2009 в 10:30



0

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

Поделиться


Unknown    

01 сентября 2009 в 16:07



0

+1 для yourkit — — — using 7.0 on dev boxes in windows
not used JProfiler for a while — не могу комментировать, так как они могли бы улучшиться за это время.

Поделиться


anjanb    

02 октября 2008 в 21:49



0

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

Поделиться


Will Hartung    

02 октября 2008 в 22:15



0

Я использовал только JProfiler (и некоторые JProbe). Насколько я могу судить, одним из ограничений YourKit является то, что они, по-видимому, не поддерживают JDK 1.4.2. Это не проблема для многих людей, но это может быть.

Поделиться


David M. Karr    

02 октября 2008 в 18:58



0

Определенно YourKit. Он самый интуитивный и стабильный!

Поделиться


pan40    

13 января 2014 в 07:55


Похожие вопросы:

Лучший бесплатный профилировщик Java на Mac

Раньше я использовал YourKit, и он работал отлично, но на мой вкус он слишком дорогой. Есть ли какой-нибудь бесплатный или открытый профилировщик Java для Mac, который работает так же хорошо, как…

Почему Yourkit 8.X рекомендуется профилировать только java 5 приложений?

При обновлении yourkit profiler я заметил следующее сообщение на их веб-сайте: YourKit Java профилировщик 8.0.30 Используйте версию 8.0 для профиля Java 5 только приложения. К профилю Java 6 и Java…

Java профилирующий инструмент для CPU потребления

Я использовал JProfiler, JProbe, AppSight, YourKit для выяснения того, какой код потребляет CPU. Но YourKit выглядит лучше других. Есть ли что-нибудь лучше ?

Jprofiler прошедшее время отличается от фактического времени загрузки

Мы сталкиваемся со странной проблемой с JProfiler 7.1.1, когда он отображает прошедшее время для данного запроса HTTP, совершенно отличное от полученного с помощью Firebug или ручного теста — 2.5s…

Имеет Ли JProfiler Вид Области Достижимости, Подобный YourKit?

Я анализирую дамп кучи, созданный jmap. YourKit имеет Reachability scope, который показывает объекты, распределенные в соответствии с их областью достижимости, то есть о том, как/доступны ли они из…

Изменить Временный Каталог Удаленного Профилировщика YourKit

Можно ли изменить каталог, в который удаленный профилировщик YourKit помещает свои банки? Мы испытываем это сообщение об ошибке при попытке запустить Tomcat на CloudFoundry (запуск Ubuntu 10.10) с…

Расширенное профилирование Java

В настоящее время наша компания ищет профайлера Java. Мы получили предложение от Compuware (продукт dynaTrace), который способен выдавать такой вид вывода для профилирования CPU (пример): (хорошо, я…

лучший профилировщик для J2ME

какой профилировщик лучше всего подходит для j2me ? в WTK есть профайлер, но он не очень хорош и полезен. JProfiler-это хорошо, но я не могу использовать его для приложения j2me. есть ли…

Легкий асинхронный профилировщик выборки с JProfiler (AsyncGetCallTrace)

Недавно я прочитал запись в блоге Джереми Мэнсона (Google) о том, как создать более точный и легкий асинхронный профилировщик выборки. Он полагается на недокументированный метод AsyncGetCallTrace в…

Как исправить, чтобы передать YourKit -agentpath в docker ENTRYPOINT

я настраиваю профилировщик YourKit для модулей docker deployment, которые развернуты на сервере linux. я попытался передать переменную-agentpath во время ENTRYPOINT. Я использую docker конкретную…

Что такое профайлер java

Главная

Новости

Опубликовано: 01.09.2018

р>

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

Andrew Pangin (Одноклассники) недавно создал один из этих инструментов: JPoint конференции в апреле, он представил opensorsny проект через не страшен точку восстановления. Другой эксперт в этой теме — Nitzan Vakart на одной и те же проблемы со многим safepoints узнал его «Почему (больше) образец Java Профайлеров являются чертовски страшно» р>.

Мы решили поговорить с обоими, начать разговор с последними новостями о асинхронном-Profiler, а затем перейти в состояние Java профилирования в целом.

JUG.ru: Недавно асинхронный профайлер был перемещен в штате GitHub хранилище Эндрю — это инструмент для профилирования-JVM, и что вызвало движение
?

Nithsan: Это объединение нескольких месторождений с аналогичными целями. Идея заключается в том, чтобы собрать в одном месте и стимулировать сообщество более активно развиваться.

Андрей Совершенно верно. Когда стало ясно, что асинхронным профилировщиком интересной Java сообщества, я решил перейти в нейтральное положение, так как сторонние разработчики иногда плохо kontribyutit комфортно в другом личном депозите.

Nitzan: Виртуальная машина Java-инструментов профилирования там, асинхронный профайлер и они подходят к той же теме с разных точек зрения: PERF-карта агент обеспечивает возможности профилирования с использованием Linux PErF , честный Profiler использует AsyncGetCallTrace, чтобы избежать смещений SafePoint и асинхронный профайлер сочетает в себе два в очень приятном способе.

Андрей Да. На самом деле, идея сочетания обоих подходов, нет ничего космического, но по какой-то причине, это никогда не происходит ни с кем.

Nitzan: В общем, он был в студии Solaris, но проблема Solaris Студии является то, что она используется около 20 людей в мире

.

Эндрю Но, насколько я знаю, он не показывает вызывает ядро, не так ли?

Nithsan: Отображает машинный код, но не ядро.

JUG.ru: С честным и асинхронной-Profiler Profiler общее преимущество «без смещения точки восстановления», теперь считает, что JVM-профилирование инструменты для выпуска начинающих могут появиться в профилировании, «Какой из двух подобных инструментов, которые я должен использовать? «Что вы можете сказать?

Эндрю Я думаю, что асинхронный профайлера далеко вперед с точки зрения точности профилирования и полноты информации. В конце концов, даже в AsyncGetCallTrace HotSpot не всегда работает: в некоторых случаях границы JVM не может восстановить трассировки стеки, а асинхронный-профайлер и иметь дело с такими ситуациями. Кроме того, Честный Profiler не показывает вообщесобственные трассировки стека. Но его большое преимущество заключается в инфраструктуре вокруг представления данных. Он может отображать результаты, имеет пользовательский интерфейс, а асинхронный профилировщик — это просто агент Java, который запускается с консоли.

Ницан: Я думаю, что будущее для асинхронного профилирования. И я хотел бы получить некоторые возможности, которые Honest Profiler имеет в асинхронном профилировщике. Существует также разница в том, что Honest Profiler работает на macOS, а асинхронный профилировщик еще не существует: важно поддерживать большое сообщество хипстеров в нашей отрасли.

JUG.ru: Кажется, что Вадим Цеско из его одноклассников уже разрешил работать с async-profiler macOS

?

Andrew: Это было до того, как я добавил поддержку перфомансов. Конкретный вызов Linux нарушил поддержку macOS. Но есть хорошие новости: несколько дней назад я разговаривал с Apple Norman Maurer (автор Netty), он также интересный асинхронный профилировщик, и он любезно согласился сделать Mac-порт р>.

JUG.ru: В июле асинхронный профайлер появился профайлер-хип — вы можете нам рассказать об этом?

Andrew: Существует два основных подхода к профилированию памяти Java. Первый — это инструмент байт-кода. Но для производственных систем это ужасно, потому что это плохо для производительности. Ряд оптимизаций компилятора перестает работать: во-первых, анализ эвакуации больше не позволяет избежать выделения в бедро.

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

Но это еще не все. Существует более эффективный подход, основанный на выборке TLAB (Thread Local Allocation Buffer). Он реализован в Java Mission Control / Java Flight Recorder, но требует включения коммерческих функций Oracle JDK, а с OpenJDK не работает вообще. используются в Google, но необходимо создать модифицированную версию JVM.

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

Нитсан: Я думаю, что это важно. Поскольку Java Mission Control, вероятно, единственный инструмент для профилирования распределений, и использование подобных процессов в JMC реализовано очень специальным образом, многие просто не делают этого профилирования. Я надеюсь, что это поможетПрофилирование прибыли становится основным.

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

Эндрю: Ява — корень всего зла 🙂 Это делает жизнь лучше и хуже. С одной стороны, из-за функциональности JVM стандартные подходы неприменимы, но, с другой стороны, JVM предоставляет свой собственный API для профилирования.

Ницан: Я думаю, что мир Java похож на Windows. Windows была ужасной операционной системой (вероятно, теперь намного лучше), но, страдая от многих недостатков, это было одновременно большим успехом. Та же история с Java. В случае инструментов профилирования Java это пошло не так. Я не совсем уверен, почему это так.

Я думаю, что разработчики JVM традиционно использовали Solaris Studio, поэтому все работало более или менее нормально, но только для них. Специалисты использовали специализированные инструменты. И большинство разработчиков Java были довольны тем, что у них было.

Но теперь Java пришлось столкнуться с реальностью. Натурное профилирование, которое работало в Solaris Studio, но было тогда нишевым решением, становится все более популярным.

Эндрю: Я считаю необходимым добавить, что Java не соответствует HotSpot, и что другие JVM могут быть более удобными для профилировщиков.

Ницан: Возможно, я что-то пропустил, но о какой JVM мы говорим? Я знаю много о Zing, и у меня есть опыт работы с IBM J9 . ..

Andrew: Теперь у меня есть папка Excelsior JET, и я вспомнил этот проект. Он знает, как прекомпилировать Java с собственным кодом и, насколько я знаю, смещение safapoint не страдает.

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

JUG.ru: AsyncGetCallTrace, который использует async-profiler и Honest Profiler, не является официальным API. Считаете ли вы, что его использование — «взлом»? Не беспокойтесь, что в будущем это может перестать работать? Будет ли полезной формальная поддержка Oracle для профилирования?

Nithsan: Так как AsyncGetCallTrace работает с момента выпуска OpenJDK 6, кажется, что он всегда работал. Он «незаконнорожденный ребенок», но я не думаю, что егоможет взять и бросить. Когда что-то становится вариантом для FMV, оно каким-то образом получает официальную поддержку. Поэтому я думаю, что мы не должны слишком беспокоиться об этом. Хотя мне интересно, насколько хорошо AsyncGetCallTrace сочетается с новым компилятором Grail.

Конечно, более формальная поддержка поможет. В настоящее время Oracle предоставляет JMC в качестве платного варианта, а остальная часть мира Java имеет нечто вроде VisualVM. Теперь это деньги. Я думаю, что Oracle имеет конфликт интересов: интересы Java, с одной стороны, и их — с другой. Можно сказать, что было бы вредно для хорошей позиции, позволяющей им вносить вклад в улучшение других профилирующих JVM.

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

Andrew: Я согласен с тем, что AsyncGetCallTrace — отчасти это «хакерский» API. Более того, это далеко не идеально: я на ошибках. Но пока это лучшее, что есть у HotSpot JVM.

JUG.ru: И если в дополнение к уже существующим AsyncGetCallTrace было ли что-нибудь еще, что облегчило жизнь для создателей профайлера

?

Андрей Да. В последнее время в списках рассылки HotSpot обсуждалось профилирование распределений. В конце концов, даже появился, который предлагает новый стандартизованный API для отбора проб бедра. Я думаю, что поднимать такие темы в списках рассылки и предлагать JEP — это правильный путь. Итак, может быть, когда-нибудь в Java 11 …

JUG.ru: Что вы думаете о будущем профилирования Java независимо от действий Oracle? Профилирование будет намного лучше, чем сейчас?

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

Nitcán: В ряде областей есть много возможностей для развития. С помощью PERF-card-agent мы приобрели способность следовать inline во время профилирования, но переходим к асинхронному профилировщику, теряя его снова. Мне бы очень хотелось увидеть ее снова.

Другая область — визуализация. Если вы используете async-profiler при работе с многопоточными приложениями, где один поток использует 100% CPU, а все остальные просто зависают, ожидая, пока профилирование может привести к запутыванию изображения. Меня интересуют проблемы представления данных, и я уверен, что есть много подобных проблем.

Андрей Да. Сегодня FlameGraph очень популярен как визуализация, но я бы сказал, что это далеко не идеально.

JUG.ru: Вы оба сказали (в отчетах и ​​блогах),что профилировщики могут создавать искаженное изображение. Считаете ли вы, что отрасль серьезно вредит использованию этого искаженного изображения? Может ли индустрия профилировщиков принести больше вреда, чем пользы?

Нитсан: Да, я думаю, что это вредит промышленности. Если вы смотрите интернет-чат о производительности Java, вы увидите, что у него полно пуль. И причина, по которой так много, заключается в том, что информация трудно проверить.

Некоторые люди сказали мне, что проблема никогда не происходит в HashMap. И причина, по которой они никогда не думали, что проблема HashMap может быть проблемой, заключается в том, что обычный профилировщик никогда их не покажет. Я не говорю, что у них есть проблема в их случае, но неважно, они никогда не узнают. И когда они смотрят на график потребления времени процессора, они не могут видеть время, затраченное на GC. Другими словами, в случае, когда «узкое место» у них есть GC, они не могут отслеживать его.

Эндрю: Я согласен с Ницаном, но я добавлю, что лучше иметь хотя бы один плохой инструмент, чем не иметь его. Основная проблема заключается не в том, когда профайлер строит, а когда он вообще не используется. Многие разработчики вообще не занимаются профилем, хотя часто проблема с производительностью заключается в неэффективных алгоритмах, и любой прокси-сервер пробоотбора легко обнаруживает его.

Ницан: Я согласен с тем, что многие люди не профилируют, и это проблема. Но если ваш единственный инструмент — плохой профайлер … вы смотрите, вы видите, что он дает вздор и говорит другим: «Лучше, чем мы просто ставим отметки времени», поэтому вы получаете выход, и легко понять, как это препятствует людям использовать профилировщики.

JUG.ru: Поэтому, чтобы улучшить ситуацию с профилированием Java, всем нам нужно работать не только для улучшения инструментов, но и для знания сообщества на

?

Нитсан: Да. Я думаю, что широкомасштабная история успеха в мире Java — JMH, Java Microbenchmarking Harness. И причина в том, что это решение было очень успешным не только с технологической точки зрения, но и в отношении обучения пользователей, что дало им возможность лучше узнать эту область.

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

Andrew: Даже самые мощные инструменты будут бесполезны, если вы не знаете, как их использовать. С тем же JMH: я много раз видел, как люди писали глупость в JMH, а затем сделали совершенно неверные выводы. Обучение является неотъемлемой частью успеха.

JUG.ru: вы оба поможете ему изучить их отношения со следующим Джокером, и вы оба отправитесь туда, чтобы представить новую версию отчетов, уже представленных на другие конференции. Что будетЕсть ли новинка?

Ницан: После прочтения отчета QCon: «Профайлеры — хоббиты», я думал, что лучшим было имя. Поэтому я решил сохранить название, но сам отчет будет совсем другим. Мы снова поговорим о профилировщиках и о том, как они могут ввести нас в заблуждение, но я думаю, что я начну с самого мрачного, а затем я покажу вам, как выйти. В прошлом отчет представлял собой серию сюрпризов, которые привели к выводу «ничего не работает». На этот раз это будет так: «ничего не работает, но мы увидим, как с этим справиться».

Эндрю: Первоначально я планировал показать непрерывность истории асинхронного профилирования, начатую на JPoint 2017. Но мы, Программный комитет, нашли много общего с докладом мой отчет Ницан, поэтому я решил заняться новой темой. Пока я не готов точно сказать, что будет, но в ближайшем будущем можно будет увидеть мой новый отчет! Так что следите за обновлениями.

3 и 4 ноября в Санкт-Петербурге состоится конференция Java Joker , где выступят Ницан и Андрей. Как обычно, после отчетов, колонки Joker находятся в дискуссионных областях, поэтому вы можете задать им вопросы о личном профилировании. А кроме Андрея и Ницана будут десятки других ораторов — вы можете увидеть программу (и купить билет).

Автор: Евгений Трифонов

Что лучше карсил форте или эссливер форте

— — — ?

. ? — !

!

: . : [ ]1

Ни один из инструментов, кроме JXInsight, не выполняет истинный анализ транзакций базы данных:

Технология JXInsight Probe также является единственной, которую можно даже запустить в производство, поскольку мы делаем профилирование NetBeans с 20x и 100x YourKit в SPECjvm2008.

Тесты

Я архитектор JXInsight, поэтому, конечно, я абсолютно предвзятый, но в то же время я, вероятно, более квалифицирован, чем большинство индустрии Java, чтобы сделать такое выражение, которое я провел последние 8 лет анализ производительности для некоторых из самых требовательных приложений Java / J2EE в производстве.

Я должен подчеркнуть, что JXInsight предназначен для разработчиков программного обеспечения, а не только для специального сеанса профилирования. У нас есть более 4000 системных свойств для настройки среды выполнения и более 600 расширений технологий, поэтому может быть необязательно, если у вас есть сложная проблема для решения и / или использования тех же инструментов для разработки, тестирования и производства.

С уважением,

Уильям

Ответ, данный Уильямом Лаутом Oct 20 & ap0; 08 до 14:19

Я написал однажды, в основном, как попытку сделать «глубокий выбор» более удобным для пользователя. Когда вы запускаете метод вручную, он основан на образце, но вместо того, чтобы брать много маленьких образцов, вы берете небольшое количество больших выборок.

Вы можете сказать, например, что команда I (обычно вызов функции) стоит вам процентов X от общего времени выполнения, более или менее, как это показано в стек на X% образцов.

Подумайте об этом, потому что — ключевой момент . Стек вызовов существует до тех пор, пока программа запущена. Если конкретная команда I находится в стеке X% времени, то, если инструкция исчезнет, ​​X% времени исчезнет. Это не зависит от количества раз, когда выполняется I или длительности вызова функции. Таким образом, таймеры и счетчики не имеют смысла. И в некотором смысле, все инструкции являются инструкциями вызова, даже если они только вызывают микрокод.

Сэмплер основан на предпосылке, что лучше знать адрес I с точностью (потому что это то, что вы ищете), чем Знайте число X% точно. Если вы знаете, что можете сэкономить около 30% времени, перекодировав что-нибудь, неужели вы действительно беспокоитесь, что можете отключить 5%? Вы все еще хотите это исправить. Количество времени, котороеэто экономит, не меньше, больше не будет сделано, если вы точно знаете X.

Таким образом, можно взять образцы таймера, но, честно говоря, я счел необходимым вызвать прерывание пользователем, одновременно нажав на две клавиши Shift. Поскольку 20 образцов, как правило, много, и поэтому вы можете быть уверены, что будете брать образцы в нужное время (т. Е. Не дожидаясь участия пользователя), это было вполне адекватно. Другой способ состоял бы в том, чтобы убедиться, что только таймер подсчитывает, пока пользователь держит клавиши Shift (или что-то в этом роде).

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

Главное, что обеспечило профайлер, был пользовательский интерфейс, поэтому вы можете легко просмотреть результаты. То, что выходит из фазы выборки, представляет собой набор выборок стека вызовов, где каждый шаблон представляет собой список адресов инструкций, где каждая команда и последняя являются контролем вызова. Пользовательский интерфейс был в основном тем, что называется видом бабочки. У него есть текущий «фокус», который является конкретной инструкцией. Слева отображается команда вызова непосредственно над этой инструкцией, которая выбирается из образцов стека. Если управление фокусировкой является инструкцией по вызову, справа от образцов отображаются следующие инструкции. В инструкции фокуса отображается процент, который представляет процент стеков, содержащих эту инструкцию. Аналогично, для каждой команды влево или вправо процент делится на частоту каждого ордера. Конечно, инструкция была представлена ​​файлом, номером строки и именем функции, в которой она была расположена. Пользователь может легко изучить данные, нажав на одну из инструкций, чтобы сделать его новым фокусом.

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

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

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

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

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

Как упоминалось ранее, частота дискретизации не является проблемой, потому что мы не измеряем производительность, мы диагностируем. Образец не приводит к изменению результатов, потому что образец не влияет на всю программу. Алгоритм, который выполняет команды N для завершения, всегда принимает N операторов, даже если он остановился определенное количество раз.

Меня часто спрашивают, как попробовать программу, которая заканчивается миллисекундами. Ответ прост — оберните его во внешний цикл, чтобы сделать выбор в течение длительного времени. Вы можете узнать, что происходит в X% времени, удалить его, получить ускорение X%, а затем удалить внешний цикл.

Этот небольшой профилировщик, который я назвал Yapa (другой анализатор производительности), был основан на DOS и сделал небольшую демонстрацию, но когда у меня была серьезная работа, я бы отказался бы от ручного метода. Основная причина заключается в том, что для стека вызовов часто недостаточно информации о состоянии, чтобы рассказать вам, зачем проходить определенный цикл. Вам также может понадобиться знать другую информацию о статусе, чтобы у вас было лучшее представление о том, что программа делала в то время. Поскольку я считаю, что ручной метод вполне удовлетворительный, я помещаю этот инструмент.

То, что часто игнорируется при профилировании, заключается в том, что вы можете сделать это несколько раз, чтобы найти некоторые проблемы. Например, предположим, что команда I1 представляет собой стек 5% времени, а I2 — это стек 50% времени. Двадцать примеров могут легко найти I2 , но не могут быть I1 . Итак, вы исправляете I2 . Затем вы начинаете все заново, но теперь I1 составляет 10% времени, поэтому 20 образцов, скорее всего, его заметят. Это позволяет повторить эффект увеличения использования профилирования, чтобы еще хуже ускорить фактор ускорения.

Профилирование производительности Java с использованием JConsole и VisualVM

Тед Нюворд
Опубликовано 19.10.2012

Как вы думаете, вы все знаете о программировании на Java? Фактически, большинство разработчиков только очищают поверхность платформы Java, изучая достаточно, чтобы выполнять свою работу. Это Тед Ньюард более глубоко в функциональности возможностей платформы Java, раскрывая малоизвестные факты, которые могут помочь решить самые сложные задачи программирования.

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

Однако с появлением JConsole в Java 5 все изменилось. JConsole — это интегрированный профилировщик производительности Java, который запускается из командной строки и оболочки GUI. Это не идеально, но это первая линия защиты более чем достаточно, когда босс говорит вам о проблемах с производительностью — и это лучше, чем Google.

В этой статье 5 секретов … Я покажу вам пять простых способов использования инструмента JConsole (или его визуально продвинутого компаньона VisualVM) для мониторинга производительности приложения Узкие места Java и монитора в коде Java

Этот материал -. пути познания Развивайте свои навыки. Смотрите:

Многие программисты Java не знают, что из Java 5 JDK включает в себя инструмент профилирования. JConsole (или, в более поздних версиях платформы Java, VisualVM) является интегрированным профилировщиком, который может работать так же легко, как компилятор Java. Просто вызовите jconsole из командной строки, если в переменной PATH есть JDK. GUI-shell, перейдите в каталог установки JDK, откройте папку bin и дважды щелкните jconsole .

Когда будет выполняться профайлер (в зависимости от версии Java и количества других программ на основе Java в то время), диалоговое окно с просьбой о подключении URL-адресов или список локальные процессы Java. иногда содержащий сам процесс JConsole

JConsole включен во все выпуски платформы Java, начиная с Java 5. VisualVM — это продвинутый профилировщик,основанный на платформе NetBeans, который появился где-то в обновлении Java 6 12. Большинство организаций еще не переключилось на Java 6, поэтому в этой статье речь идет о JConsole. Однако большинство советов имеют отношение к обоим профиляторам. Примечание : VisualVM не только включен в Java 6, но также предоставляется отдельно. См. Раздел.)

В Java 5 процессы Java не настроены по умолчанию для профилирования. Когда вы запускаете аргумент командной строки -Dcom. sun.management.jmxremote указывает виртуальную машину для Java 5, вам нужно открыть соединение с профилировщиком, чтобы найти их. Когда JConsole контролирует процесс, дважды щелкните его, чтобы начать профилирование.

Профилеры делают свои собственные затраты, поэтому стоит потратить несколько минут на их оценку. Самый простой способ узнать стоимость JConsole — запустить приложение отдельно, затем под профилировщиком и измерить разницу в производительности. (Приложение не должно быть слишком большим или слишком маленьким, моим любимым примером является SwingSet2, который поставляется вместе с JDK). Сначала я попытался запустить SwingSet2 с параметром -verbose: gc , чтобы увидеть циклы сбора мусора, а затем запустить одно и то же приложение с подключенным профилировщиком JConsole. С JConsole наблюдалась регулярная последовательность циклов GC, что не было иначе. Он обеспечивает производительность профилировщика.

Профилировщики веб-приложений требуют связи через сокет, поэтому небольшая настройка на JConsole (или на любом профилировщике на основе JVMTI) для команд / профилированных удаленных приложений.

Например, если Tomcat запущен на компьютере с именем веб-сервера и JMX, что JVM включен и прослушивает порт 9004, подключите его к JConsole (или тому подобное другой JMX-клиент), вы должны указать URL-адрес JMX. По сути, все, что требуется для профилирования сервера приложений, работающего в удаленном центре данных, является URL-адресом. -address JMX. (Для получения дополнительной информации о дистанционном мониторинге и управлении через JMX и JConsole см. Раздел).

О проблемах с производительностью в коде приложения реагируют по-разному, но все эти реакции предсказуемы. Разработчики, которые программируют первые несколько дней Java, скорее всего, запустит старую среду IDE и начнут видеть основные части базы исходного кода, ищущие знакомые «красные флаги», такие как синхронизированные блоки, размещение объектов и т.д. Менее опытный разработчик, скорее всего, покроет флаги -X , поддерживаемые JVM, ища способы оптимизации сборщика мусора. Новичок, конечно же, отправится прямо в Google, надеясь, что кто-то нашел волшебную виртуальную машину Java «Accelerator», и им не нужно переписывать какой-либо код.

Ни один из этих подходов не является чем-то принципиально порочным, но все это случайное действие. болееэффективный способ решения проблем с производительностью — использовать профилировщик, а теперь, когда он интегрирован в платформу Java, отказаться от того, что нет оправдания

В JConsole есть несколько вкладок, которые полезны для сбора статистических данных! в частности:

память : контролировать работу разных кучек в коллекторе JVM bin;
Темы : для изучения текущей цели JVM;
категории : для мониторинга общего количества загруженных классов VM

Эти вкладки (и соответствующие графики) являются объектно-ориентированными JMX, что каждый реестр Java VM 5 и выше JMX-сервера интегрирован в JVM. Полный список модулей для этой виртуальной машины Java отображается на вкладке MBeans, а также метаданные и ограниченный пользовательский интерфейс для отображения этих данных и выполнения операций. (Однако запись уведомления выходит за пределы пользовательского интерфейса JConsole. )

Предположим, что процесс Tomcat «медленный» из-за ошибок, таких как OutOfMemoryError . Чтобы узнать, что происходит, откройте JConsole, перейдите на вкладку «Классы» и отслеживайте количество классов. Если их число постоянно увеличивается, мы можем предположить, что где-то на сервере приложений или в вашем коде просочился ClassLoader , а пробел PermGen скоро будет исчерпан , Если вам нужно дополнительное подтверждение проблемы, перейдите на вкладку «Память».

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

Начните с перехода на вкладку MBeans, где вам нужно найти , затем HotSpotDiagnostic. . Выберите Operations , и вы увидите кнопку dumpHeap в правой панели. Если первое поле ввода (String) dumpheap указывает имя файла для дампа, оно отображает текущее состояние всей кучи JVM и сохраняет его в файле.

Позже вы можете использовать разные коммерческие профилировщики для анализа файла или VisualVM — для синтаксического анализа моментального снимка. (Помните, что VisualVM присутствует в Java 6, а также доступен для отдельной загрузки.)

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

В JConsole хорошая новость заключается в том, что вся программа написана на «хорошем старом языке Java»: , Утилита могла написать любого Java-программиста. JDK даже включает пример конфигурации JConsole, создавая новый плагин (см. Раздел). В VisualVM, построенном поверх NetBeans, концепция плагина идет намного дальше.

Если JConsole (а также VisualVM или любой другойИнструмент) — это не то, что вам нужно, или не следует тому, что вы ищете, или нет, как вы пожелаете, вы можете попробовать написать свое собственное. И если Java-код кажется слишком тяжелым, всегда под рукой Groovy, JRuby или любой из дюжины других JVM-языков, которые помогут вам сделать это быстрее.

На самом деле, довольно простой инструмент на основе командной строки, подключенный через. JMX, который позволяет точно отслеживать данные, которые вас интересуют, именно так, как вам нужно.

Производительность отслеживания Java не заканчивается JConsole или VisualVM — в кеше JDK некоторые количество инструментов, которые большинство разработчиков не являются подозрительными. В следующей статье в этом мы рассмотрим некоторые экспериментальные установки в командной строке, которые помогут «выкопать» больше данных о производительности. Поскольку эти инструменты обычно ориентированы на конкретные данные, они меньше и легче, чем полный профилировщик и, следовательно, имеют меньшее влияние на производительность.

Оригинальная статья :.
: серия статей, содержащих полезные советы для программирования на Java
(Sun Microsystems) :. Более подробная информация об использовании JMX и встроенных инструментов виртуальной машины Java для отслеживания и краткое введение в разработку плагинов с использованием API-интерфейсов JConsole (
). Производительность приложений Java
(Мэнди Чунг, Java.net, май 2008 г.). Дастин Маркс, разработка программного обеспечения Дастина. Соображения и спекуляции, июнь 2009 г.) Инструменты контроля и контроля Интегрированный JDK, включая JConsole и VisualVM.
(Andrew Wilcox, developerWorks, март 2006 г.). : Пример использования интерфейса агентов Java 5 и AOP Чтобы создать специальный профилировщик Profiler Java
:. Центр здоровья — недорогие диагностические инструменты для мониторинга работы виртуальной машины IBM Java.

.

> В JDK / bin есть jvisualvm.exe, который является профилировщиком VisualVM. Свободный и престижный>. Для начального анализа этого достаточно с головой.
Это именно оригинальный SUN JDK? У меня есть Open. Кажется, его там нет.

Отправлено ActualForum NNTP Server 1.5

★★★★★ YourKit Java Profiler — обзор, плюсы и минусы программы, отзывы пользователей.

Профилировать любое приложение SE, EE, сервер, технологию и инфраструктуру; на нескольких платформах; локально … Создано YourKit

Описание

YourKit Java Profiler — ведущий инструмент профилирования на рынке Java, который предоставляет самые инновационные, мощные и интеллектуальные возможности анализа производительности. YourKit Java Profiler обеспечивает максимальную экономию времени, а также надежные функции обеспечения уверенности. Большинство его функций не просто непревзойденны, но абсолютно уникальны. QualityYourKit помогает вам решать проблемы производительности и масштабируемости на ранних стадиях разработки, таким образом гарантируя качество продукта с самого начала. Возможность профилировать приложения Java не только во время тестирования, но даже в процессе производства приводит к значительному повышению качества конечного продукта и уровня поддержки клиентов. Экономия времени Благодаря уникальному профилированию по требованию вы можете запускать профилированное приложение с абсолютно нулевыми накладными расходами, активировать фактическое профилирование только тогда, когда это необходимо. Эта функциональность вместе с общей скоростью профилирования приводит к значительному сокращению времени разработчика … Подробнее »ProductivityYourKit получает огромный выигрыш в производительности благодаря наличию всех расширенных функций YourKit, когда они нужны больше всего, и использованию их бесшовного интеграция с наиболее популярными средами разработки и серверами приложений. Высокая рентабельность инвестиций с помощью YourKit Java Profiler обеспечивает качество, повышает производительность и экономит время, что в итоге приводит к повышению эффективности и быстрому возврату ваших инвестиций. Наша гибкая лицензионная политика с несколькими бонусами и минимальными ограничениями оказалась очень эффективной и выгодной для наших пользователей.

Видео

Интерфейс

YourKit Java Profiler — лицензия, русская версия, цена

Сколько стоит купить лицензию, варианты поставки

  • Артикул:
    YRKT3205430
  • НДС:
    20 % (включен в стоимость)
  • Тип поставки:
    Электронная (e-mail)
  • Язык (версия):
    Английский
  • Срок поставки лицензионной программы или ключа активации:
    3-14 рабочих дней
  • Примечания:
    Локальная версия. 1 год базовой поддержки и бесплатных обновлений
  • Платформа:
    Windows / Mac OS / Linux
  • Тип лицензии:
    Постоянная
  • Тип покупателя:
    Коммерческая
  • Доступна оплата картой
  • Артикул:
    YRKT3205431
  • НДС:
    20 % (включен в стоимость)
  • Тип поставки:
    Электронная (e-mail)
  • Язык (версия):
    Английский
  • Срок поставки лицензионной программы или ключа активации:
    3-14 рабочих дней
  • Примечания:
    Локальная версия. 1 год базовой поддержки и бесплатных обновлений
  • Платформа:
    Windows / Mac OS / Linux

«Java-разработчики не осознают проблему с профайлерами» Андрей Паньгин и Нитсан Вакарт о Java-профилировании

Легко подумать, что от профилирования не стоит ожидать больших новостей: поскольку разработчики профилируют уже десятилетиями, до чего там можно было ещё не додуматься? Но в Java-профилировании кроются серьёзные подводные камни вроде safepoint bias, и появляются новые инструменты для решения подобных проблем.

Андрей apangin Паньгин (Одноклассники) недавно создал один из таких инструментов: на конференции JPoint в апреле он представил опенсорсный проект async-profiler, которому safepoint bias не страшен. Другой эксперт в этой теме — Нитсан Вакарт: о той же проблеме с safepoints многие узнали благодаря его блог-посту «Why (Most) Sampling Java Profilers Are Fucking Terrible».

Мы решили поговорить с ними обоими сразу, начав разговор с последних новостей об async-profiler, а позже перейдя к состоянию Java-профилирования в целом.

JUG.ru: Недавно async-profiler был перемещён на GitHub из личного репозитория Андрея в “jvm-profiling-tools” — что представляет собой jvm-profiling-tools, и чем вызвано перемещение?

Нитсан: Это объединение нескольких репозиториев, преследующих схожие цели. Идея в том, чтобы собрать их в одном месте и стимулировать сообщество активнее их развивать.

Андрей: Именно. Когда стало понятно, что async-profiler интересен Java-сообществу, я решил его перенести в нейтральное место, потому как сторонним разработчикам порой некомфортно контрибьютить в чужой личный репозиторий.

Нитсан: В jvm-profiling-tools есть Honest Profiler, async-profiler и perf-map-agent, и они подходят к одной теме с разных сторон: perf-map-agent открывает возможности для профилирования с использованием линуксового perf, Honest Profiler использует AsyncGetCallTrace, что позволяет избежать safepoint bias, а async-profiler совмещает то и другое очень приятным образом.

Андрей: Да. На самом деле, в идее сочетания обоих подходов ничего космического нет, но почему-то никому в голову это раньше не приходило.

Нитсан: Вообще это было в Solaris Studio, но проблема Solaris Studio в том, что им пользуются человек 20 в мире.

Андрей: Но, насколько я знаю, он не показывает вызовы ядра, так ведь?

Нитсан: Показывает нативный код, но не ядро.

JUG.ru: Поскольку у Honest Profiler и async-profiler есть общее преимущество «отсутствие safepoint bias», теперь при взгляде на jvm-profiling-tools у новичков в профилировании может появиться вопрос: «Ну и какой из двух похожих инструментов мне использовать?» Что вы можете им сказать?

Андрей: Я считаю, что в отношении точности профилирования и полноты информации async-profiler далеко впереди. Ведь даже сам AsyncGetCallTrace в HotSpot работает не всегда: в некоторых пограничных случаях JVM не может восстановить стек-трейс, хотя async-profiler справляется и с такими ситуациями. Кроме того, Honest Profiler вообще не показывает нативные стек-трейсы. Но его большое преимущество в инфраструктуре вокруг представления данных. Он умеет отображать результаты красиво, у него есть UI, а async-profiler — это просто Java-агент, запускаемый из консоли.

Нитсан: Я думаю, что будущее за async-profiler. И мне бы хотелось, чтобы некоторые возможности Honest Profiler попали в async-profiler. Есть ещё разница в том, что Honest Profiler работает на macOS, а async-profiler пока нет: поддерживать большое сообщество хипстеров в нашей отрасли — это важно.

JUG.ru: Вроде бы Вадим Цесько из Одноклассников уже делал возможной работу async-profiler на macOS?

Андрей: Это было до того, как я добавил поддержку perf events. Linux-специфичный вызов сломал поддержку macOS. Но есть и хорошие новости: буквально на днях я разговаривал с Норманом Маурером из Apple (автором Netty), ему также интересен async-profiler, и он любезно согласился сделать Mac-порт.

JUG.ru: В июле в async-profiler появился профайлер хипа — можете рассказать об этом?

Андрей: Существует два основных подхода к профилированию памяти в Java. Первый — это инструментация байткода. Но для продакшен-систем он ужасен, потому что плачевно сказывается на производительности. Ряд оптимизаций компилятора перестаёт работать: прежде всего, Escape Analysis больше не помогает избегать аллокаций в хипе.

Другой подход — использование DTrace probes, что тоже крайне накладно, и может включаться только на старте JVM.

Но это не всё. Есть ещё гораздо более эффективный подход, основанный на сэмплировании TLAB (Thread Local Allocation Buffer). Он реализован в Java Mission Control / Java Flight Recorder, но требует включения коммерческих функций Oracle JDK, а с OpenJDK вообще не работает. Похожий метод используют внутри Google, но там требуется сборка модифицированной версии JVM.

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

Нитсан: Я думаю, это важно. Поскольку Java Mission Control сейчас, пожалуй, единственный инструмент для профилированием аллокаций, и работа с подобными процессами в JMC реализована очень своеобразно, многие люди просто не занимаются таким профилированием. Надеюсь, что это поможет профилированию аллокаций стать мейнстримом.

JUG.ru: Может показаться странным, что заметные подвижки в профилировании происходят в 2017-м, когда они были бы полезны годы назад. В чём причина такой задержки?

Андрей: Java — корень всех зол 🙂 Она делает жизнь одновременно и лучше, и хуже. С одной стороны, из-за особенностей JVM стандартные подходы становятся неприменимы, но с другой — JVM предоставляет свои собственные API для профилирования.

Нитсан: Я думаю, что мир Java похож на Windows. Windows была ужасной ОС (вероятно, сейчас куда лучше), но, страдая от многих недостатков, она одновременно имела большой успех. Та же история и с Java. В случае с инструментами профилирования у Java получилось плохо. Я не совсем уверен в том, почему это так.

Я думаю, что разработчики JVM традиционно использовали Solaris Studio, так что всё более-менее нормально работало, но только для них. Специалисты использовали специализированные инструменты. А большинство Java-разработчиков были довольны тем, что имели.

Но теперь Java пришлось столкнуться с реальностью. Нативное профилирование, которое работало в Solaris Studio, но тогда было нишевым решением, становится все более популярным.

Андрей: Считаю нужным добавить, что Java не равно HotSpot, и другие JVM могут быть более дружелюбны к профайлерам.

Нитсан: Может быть, я что-то упустил, но о какой JVM мы говорим? Я знаю много о Zing, и у меня есть немного опыта работы с IBM J9…

Андрей: Сейчас на мне футболка Excelsior JET, и поэтому я вспомнил об этом проекте. Он умеет прекомпилировать Java в нативный код, и, насколько я знаю, от safepoint bias не страдает.

Нитсан: А, ок. Никогда этим не пользовался. Полагаю, что в этом случае можно сразу брать нативный профайлер.

JUG.ru: AsyncGetCallTrace, который используют async-profiler и Honest Profiler, не является официальным API. Не ощущается ли его использование «хаком»? Не беспокоитесь ли, что в будущем он может перестать функционировать? Помогла бы более официальная поддержка Oracle в вопросах профилирования?

Нитсан: AsyncGetCallTrace работает ещё с запуска OpenJDK 6, так что похоже, что он всегда был и будет работать. Это «незаконнорожденный ребенок», но я не думаю, что его могут взять и выкинуть. Когда что-либо становится опцией JVM, это в некотором роде получает официальную поддержку. Так что думаю, нам не стоит слишком беспокоиться об этом. Хотя мне интересно, насколько хорошо AsyncGetCallTrace уживается с новым компилятором Graal.

Конечно, более официальная поддержка помогла бы. На данный момент Oracle предоставляет JMC в качестве платного варианта, а всему остальному Java-миру остаётся что-то вроде VisualVM. Сейчас в этом деньги. Я думаю, что Oracle испытывает конфликт интересов: интересы Java, с одной стороны, и их собственные — с другой. Можно сказать, что для них поспособствовать улучшению других JVM-профайлеров означало бы ухудшить собственное положение.

Я не утверждаю, что они активно переживают из-за этого. Я понятия не имею, чего они сейчас хотят. Возможно, они сделают доступными для всех вещи вроде JMC. Теперь, когда работа над Jigsaw закончена, у них есть много времени для другого.

Андрей: Соглашусь, что AsyncGetCallTrace — отчасти «хакерский» API. К тому же далеко не идеальный: я и сам сообщал о багах. Но пока что это лучшее, что есть в HotSpot JVM.

JUG.ru: А может ли, помимо уже имеющихся вещей вроде AsyncGetCallTrace, появиться что-то ещё, что облегчит жизнь создателям профайлеров?

Андрей: Да. Недавно в списках рассылки HotSpot обсуждалось профилирование аллокаций. В итоге даже появился проект JEP, который предлагает новый стандартизованный API для сэмплирования хипа. Думаю, что поднимать такие темы в рассылках и предлагать JEP — правильный путь. Так что, возможно, когда-нибудь в Java 11…

JUG.ru: Что вы думаете о будущем Java-профилирования независимо от действий Oracle? Профайлеры станут намного лучше, чем сейчас?

Андрей: Очень на это надеюсь. В своих докладах я стараюсь доносить до разработчиков мысль, что у профайлеров, которые они используют сейчас, есть большие подводные камни. Нужно либо прекратить использовать их, либо как следует разобраться в их недостатках и ловушках. И думаю, когда больше людей осознают масштабы проблемы, разработчики этих инструментов примутся их улучшать.

Нитcан: В ряде вопросов есть куда расти. С perf-map-agent мы обрели возможность отслеживать инлайнинг при профилировании, но перейдя к async-profiler, снова её теряем. Мне бы очень хотелось увидеть её снова воплощённой.

Другая область — визуализация. Если использовать async-profiler при работе с многопоточными приложениями, где один поток задействует 100% CPU, а все остальные просто висят в ожидании, при профилировании можно получить сбивающую с толку картину. Меня интересуют проблемы представления данных, и я уверен, что существует множество подобных проблем.

Андрей: Да. Сегодня FlameGraph очень популярен в качестве визуализации, но я бы сказал, что он далеко не совершенен.

JUG.ru: Вы оба уже говорили (в докладах и блог-постах), что профайлеры могут создавать искажённую картину. Считаете ли вы, что отрасли сильно вредит использование людьми этой искажённой картины? Может ли быть так, что индустрии от профайлеров тогда вообще больше вреда, чем пользы?

Нитсан: Да, я думаю, что это вредит индустрии. Если вы посмотрите в интернете обсуждения производительности Java, то увидите, что там полно булшита. И причина, по которой его так много, в том, что информацию сложно верифицировать.

Некоторые люди говорили мне, что проблема никогда не оказывается в HashMap. И причина, по которой они никогда не думали, что HashMap может быть проблемой, состоит в том, что обычный профайлер им этого никогда не покажет. Я не утверждаю, что конкретно в их случае проблема в нём, но как бы то ни было, они об этом никогда не узнают. А когда они смотрят на график расхода времени CPU, они не могут увидеть время, затраченное на GC. То есть в том случае, если «бутылочным горлышком» у них оказался GC, они никак не смогут этого отследить.

Андрей: Я согласен с Нитсаном, но добавлю, что лучше иметь хотя бы плохой инструмент, чем не иметь никакого. Главная проблема — не когда профайлер привирает, а когда он не используется совсем. Многие разработчики вообще не профилируют, хотя зачастую проблема производительности кроется в неэффективных алгоритмах, и любой сэмплирующий профайлер её легко выявит.

Нитсан: Я согласен, что многие люди не профилируют, и это проблема. Но если единственным вашим инструментом оказывается плохой профайлер… Вы смотрите на него, видите, что он выдаёт какую-то бессмыслицу, и говорите остальным: «Лучше мы будем просто ставить временные метки», таким у вас получается вывод, и несложно понять, как подобное отбивает у людей желание использовать профайлеры.

JUG.ru: Значит, чтобы улучшить ситуацию с Java-профилированием, нам всем надо работать не только над улучшением инструментов, но и над знаниями сообщества о них?

Нитсан: Да. Я думаю, масштабная история успеха в Java-мире — это JMH, Java Microbenchmarking Harness. И причина в том, что это решение было очень успешным не только с технологической точки зрения, но и в аспекте обучения пользователей, предоставления им возможности лучше познакомиться с этой областью.

Думаю, то, что Андрей и создаёт инструменты, и рассказывает людям, очень важно.

Андрей: Даже самые мощные инструменты будут бесполезны, если не уметь ими пользоваться. С тем же JMH: я много раз видел, как люди писали ерунду в JMH, а потом делали совершенно неправильные выводы. Обучение является неотъемлемой частью успеха.

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

Нитсан: После того, как я представил на QCon доклад “Profilers are lying hobbitses”, я подумал, что самое лучшее в нём — это название. Поэтому я решил сохранить название, но сам доклад будет очень сильно отличаться. Мы снова будем говорить о профайлерах и о том, как они могут ввести нас в заблуждение, но, думаю, я начну с самого мрачного, а затем буду показывать, как выкарабкаться. В прошлом доклад был серией сюрпризов, приводивших к выводу «ничего не работает». В этот раз будет так: «ничего не работает, но посмотрим, как нам с этим справиться».

Андрей: Изначально я планировал показать продолжение истории async-profiler, начатой на JPoint 2017. Однако потом мы с Программным Комитетом обнаружили большое сходство моего доклада с докладом Нитсана, так что я решил взять новую тему. Пока что я не готов сказать, что именно это будет, но в ближайшее время в программе Joker 2017 можно будет увидеть мой новый доклад! Так что следите за обновлениями.

Java-конференция Joker, где выступят Нитсан и Андрей, состоится в Петербурге 3-4 ноября. Как обычно, после докладов спикеры Joker оказываются в дискуссионных зонах, так что там можно будет расспросить их о профилировании лично. А помимо Андрея и Нитсана, там будут десятки других спикеров — на сайте конференции можно увидеть программу (и приобрести билет).

.

Практические советы по использованию профайлера в Unity

Инструмент профилировки Unity профайлер даёт конкретные данные о производительности игры и облегчает процесс её оптимизации. Профайлер предоставляет покадровые показатели, с помощью которых можно легче выявить проблемные места. Он также даёт информацию о производительности игры вне редактора. Имейте в виду, что использование профайлера частично сказывается на производительности. Чтобы увеличить точность показателей производительности, нужно создать билд для необходимой платформы и запустить игру на целевом устройстве. Хотя наилучшую производительность можно получить на неотладочной сборке (Development Build), профайлер Unity может работать только на отладочной сборке.

Чтобы активировать профайлер в приложении, необходимо в окне Build Settings (File→Build Settings) включить параметры Development Build и Autoconnect Profiler. При запуске приложения профайлер будет запускаться автоматически. Подключить профайлер также можно в Profiler Controls через выпадающий список в редакторе.

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

Примечание Не сравнивайте показания профайлеров разных версий Unity. Разные архитектуры профайлеров по-разному отображают показания.

Профилирование в редакторе

Не стоит забывать о некоторых подводных камнях при профилировании приложения в редакторе. Из-за большого количества открытых окон могут проскакивать лаги. Даже рендер в самом редакторе даёт о себе знать. Поэтому крайне важно хоть иногда профилировать приложение на целевом устройстве и не полагаться только на данные из редактора.

Deep Profile

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

Примечание Начиная с Unity 2017. 3, режим deep profile работает не только в редакторе, но и на Android, и на Desktop, с использованием бэкенда Mono.

Для включения этого режима на Desktop используйте аргумент командной строки -deepprofiling.

Для включения этого режима на Android используйте аргумент командной строки adb.

Например:
~$ adb shell am start -n com.company.game/com.unity3d.player.UnityPlayerActivity -e 'unity' '-deepprofiling'

Профилирование памяти в редакторе

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

  • В процессе выполнения у каждого меша флаг read/write установлен независимо от значения Read/Write Enabled в настройках импорта ассета. Это уже удваивает память мешей, отображаемую в профайлере.
  • Профилирование в редакторе также отключает сжатие вершин (Vertex Compression).
  • В процессе выполнения приложения в редакторе создаётся больше временных данных в памяти. К примеру, GetComponent в случае отсутствия компонента выделяет под него временную память. Поэтому Unity может выбросить исключение в редакторе, но не сделать этого в билде.

Статистика рендера

В Unity есть функция отображения статистики рендера в реальном времени (окно Game). Туда входят fps, батчи draw calls, использование VRAM, количество вершин и треугольников. Для включения слоя статистики необходимо нажать на кнопку Stats на панели окна Game. Эта статистика поможет анализировать батчинг и GPU производительность, основываясь на количестве вызовов отрисовки.

Статистика в окне Game

Для более детальной статистики рендера можно открыть вкладку рендера в профайлере.

Вкладка рендера, показывающая детальную статистику за кадр

На изображении выше видно, что пустая сцена имеет 5 вызовов SetPass и 5 вызовов отрисовки.

  • Количество вызовов SetPass играет важную роль, т. к. оно негативно влияет на производительность. Количество этих вызовов должно быть как можно меньше.
  • Вызовы отрисовки (draw calls) являются менее важным параметром, если ваше приложение не зависит от производительности процессора. Это связано с тем, что вызовы отрисовки выполняются в рендеринговом потоке, который запускается на процессоре. Уменьшить зависимость от производительности процессора можно многопоточным рендерингом.

Вызовы отрисовки

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

Многопоточный рендер и Graphics Jobs

Многопоточный рендер и Graphics Jobs (Player Settings) чаще всего положительно сказываются на производительности, но во время отладки и профилирования некоторые показатели могут быть «размытыми». Для более точного профилирования можно посмотреть на оптимизацию графики в Unity.

Кадровый отладчик

Кадровый отладчик позволяет остановить игру на определённом кадре и пройтись по основным событиям. С его помощью можно просмотреть, как Unity выстраивает сцену и продумать возможные способы оптимизации. Отладчик также указывает на те GameObject’ы, рендер которых не обязателен. Отключив эти GameObject’ы, можно уменьшить число вызовов отрисовки на один кадр.

Отладчик не показывает отдельные вызовы отрисовки или разницу между ними. Он показывает процесс построения кадра. Только нативные GPU-профайлеры дадут исчерпывающую информацию о вызовах отрисовки (чаще всего привязанную к времени). Кадровый отладчик может оказаться полезным в отладке пайплайна и батчинга (особенно при работе с Unity UI). Детальная информация описана в документации кадрового отладчика.

Профайлер памяти

В этом проекте демонстрируется использование профайлера памяти. Также по нему есть документация.

Снимок с профайлера памяти

Данный инструмент отслеживает память, выделенную подсистемами Unity, а также пользовательскими скриптами (до версии Unity 2017. 3). Профайлер не может отслеживать выделение памяти из сторонних инструментов. Начиная с версии Unity 2017.3 профайлер также поддерживает отслеживание управляемых объектов в среде выполнения Mono scripting.

Подробно профайлер можно изучить в этом видео и документации.

Перевод статьи «Unity Profiler»

Руководство по профилировщикам Java

Если у вас есть несколько лет опыта работы в экосистеме Java, и вы заинтересованы в том, чтобы поделиться этим опытом с сообществом (и, конечно же, получать деньги за свою работу), взгляните на » Напишите нам ».
Ура, Евгений

1. Обзор

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

Профилировщик Java — это инструмент, который отслеживает конструкции и операции байт-кода Java на уровне JVM. Эти конструкции кода и операции включают создание объекта, итеративное выполнение (включая рекурсивные вызовы), выполнение методов, выполнение потоков и сборку мусора.

В этой статье мы обсудим основные профилировщики Java: JProfiler, YourKit, Java VisualVM и Netbeans Profiler.

2. JProfiler

JProfiler — лучший выбор для многих разработчиков.Благодаря интуитивно понятному пользовательскому интерфейсу JProfiler предоставляет интерфейсы для просмотра производительности системы, использования памяти, потенциальных утечек памяти и профилирования потоков.

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

Вот как выглядит интерфейс JProfiler:

Обзорный интерфейс JProfiler с функциями

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

JProfiler также обеспечивает расширенное профилирование для баз данных SQL и NoSQL . Он обеспечивает специальную поддержку для профилирования баз данных JDBC, JPA / Hibernate, MongoDB, Casandra и HBase.

На снимке экрана ниже показан интерфейс проверки JDBC со списком текущих подключений:

Просмотр зондирования базы данных JProfiler

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

Live Memory — это одна из функций JProfiler, которая позволяет видеть текущее использование памяти нашим приложением . Мы можем просмотреть использование памяти для объявлений и экземпляров объектов или для всего дерева вызовов.

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

На экране ниже показано использование оперативной памяти всеми объектами с количеством экземпляров:

Просмотр живой памяти JProfiler

JProfiler поддерживает интеграцию с популярными IDE , такими как Eclipse, NetBeans и IntelliJ.Можно даже перейти от снимка к исходному коду !

3. YourKit

YourKit Java Profiler работает на многих различных платформах и обеспечивает отдельные установки для каждой поддерживаемой операционной системы (Windows, MacOS, Linux, Solaris, FreeBSD и т. Д.).

Как и JProfiler, YourKit имеет основные функции для визуализации потоков, сборок мусора, использования памяти и утечек памяти, с поддержкой для локального и удаленного профилирования через ssh-туннелирование .

Вот краткий обзор результатов профилирования памяти серверного приложения Tomcat:

YourKit Java Profiler Профилирование памяти серверного приложения Tomcat

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

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

На рисунке 5 показан пример интерфейса профилирования потоков:

Рисунок 5. Интерфейс профилирования потоков YourKit Java Profiler

Мы также можем профилировать SQL, а база данных NoSQL вызывает с помощью YourKit. Он даже дает представление о фактически выполненных запросах.

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

4. Java VisualVM

Java VisualVM — это упрощенный, но надежный инструмент профилирования для приложений Java. По умолчанию этот инструмент входит в комплект Java Development Kit (JDK). Его работа зависит от других автономных инструментов, представленных в JDK, таких как JConsole , jstat , jstack , jinfo и jmap .

Ниже мы можем увидеть простой обзорный интерфейс текущего сеанса профилирования с использованием Java VisualVM:

Профилирование приложения локального сервера Tomcat Java VisualVM

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

Java VisualVM поддерживает локальное и удаленное профилирование , а также профилирование памяти и ЦП. Для подключения к удаленным приложениям требуется предоставить учетные данные (имя хоста / IP-адрес и пароль, если необходимо) , но не обеспечивает поддержку ssh-туннелирования . Мы также можем включить профилирование в реальном времени с мгновенными обновлениями (обычно каждые 2 секунды).

Ниже мы можем увидеть внешний вид памяти приложения Java, профилированного с помощью Java VisualVM:

Гистограмма кучи памяти Java VisualVM

С помощью функции моментальных снимков Java VisualVM мы можем делать снимки сеансов профилирования для последующего анализа .

5. Профилировщик NetBeans

Профилировщик NetBeans связан с IDE NetBeans Oracle с открытым исходным кодом.

Хотя этот профилировщик имеет много общего с Java VisualVM , это хороший выбор, когда мы хотим, чтобы все было заключено в одну программу (IDE + Profiler).

Все другие описанные выше профилировщики предоставляют плагины для улучшения интеграции IDE.

На снимке экрана ниже показан пример интерфейса профилировщика NetBeans:

Интерфейс телеметрии Netbeans Profiler

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

6. Прочие профилировщики твердых тел

Некоторые заслуживающие упоминания здесь: Java Mission Control, New Relic и Prefix (от Stackify) — они имеют меньшую долю рынка в целом, но определенно заслуживают упоминания. Например, префикс Stackify — отличный легкий инструмент для профилирования, хорошо подходящий для профилирования не только приложений Java, но и других веб-приложений.

7. Заключение

В этой статье мы обсудили профилирование и профилировщики Java. Мы рассмотрели особенности каждого Profiler и то, что определяет потенциальный выбор одного из них.

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

Зачем нужны эти 3 разных типа — Stackify

Отладка проблем с производительностью в производственной среде может быть болезненной, а в некоторых случаях невозможной без правильных инструментов. Профилирование Java существует всегда, но профилировщики java, о которых думают большинство разработчиков, относятся только к одному типу: стандартные профилировщики JVM.

Однако использовать профилировщик одного типа недостаточно.

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

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

В этом посте мы обсудим три типа профилировщиков Java и почему все они нам нужны при разработке приложения. Мы начнем с типов и подробно рассмотрим каждый из них.

Давайте рассмотрим три различных типа профилировщиков Java:

  1. Стандартные профилировщики JVM , которые отслеживают каждую деталь JVM (ЦП, поток, память, сборщик мусора и т. Д.).
  2. Легкие профилировщики , которые выделяют ваше приложение с небольшой абстракцией.
  3. Инструменты управления производительностью приложений (APM) , используемые для мониторинга приложений в производственной среде.


Стандартные профилировщики JVM

Такие продукты, как VisualVM, JProfiler, YourKit и Java Mission Control.

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

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

Плюсы:

  • Стандартные профилировщики отлично подходят для отслеживания утечек памяти. Они подробно описывают все использование памяти JVM и то, какие классы / объекты ответственны за это.Возможность вручную запускать сборку мусора и затем просматривать потребление памяти может легко пролить свет на классы и процессы, которые по ошибке удерживают память.
  • Профилировщик Java, подходящий для отслеживания использования ЦП, обычно предоставляет функцию выборки ЦП для отслеживания и агрегирования времени ЦП по классам и методам, чтобы помочь сосредоточить внимание на горячих точках.

Минусы:

  • Требуется прямое подключение к отслеживаемой JVM; в большинстве случаев это приводит к ограничению использования средами разработки.(Примечание: некоторые профилировщики могут ограниченно работать с дампами потоков и памяти.)
  • Они замедляют работу вашего приложения; Для обеспечения высокого уровня детализации требуется большая вычислительная мощность.

Облегченные профилировщики транзакций Java

Такие продукты, как XRebel и Stackify Prefix .

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

  • Профилировщики аспектов используют аспектно-ориентированное программирование (АОП) для внедрения кода в начало и конец указанных методов. Внедренный код может запускать таймер, а затем сообщать прошедшее время, когда метод завершается. Эти профилировщики просты в настройке, но вам нужно знать, что нужно профилировать. Для примера см. Профилирование метода Spring AOP.
  • Профилировщики Java Agent используют API инструментария Java для внедрения кода в ваше приложение. Этот метод имеет больший доступ к вашему приложению, поскольку код переписывается на уровне байт-кода. Это позволяет инструментировать любой код, выполняющийся в вашем приложении — будь то код, который вы написали, или сторонние библиотеки, от которых зависит ваше приложение.Ознакомьтесь с этим введением в Java-агенты, чтобы увидеть, как все это работает.

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

Stackify Prefix — это ориентированный на разработчика профилировщик Java, использующий негласно метод профилировщика Java Agent.

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

В качестве примера, при запуске приложения, использующего Hibernate, Prefix не только детализирует прошедшее время для запросов, но также отображает значения параметров для сгенерированного SQL. Когда ваше приложение обращается к SOAP / REST API, Prefix предоставляет содержимое запроса и ответа.

Скриншот префикса: трассировка веб-запросов Tomcat

Низкие накладные расходы, профилирование Java JVM в производственной среде (APM)

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

Производственная среда — это всегда разная среда — в установках разработки и подготовки обычно разные наборы данных и нагрузка.

Инструменты Java APM обычно используют метод профилировщика Java Agent, но с другими правилами инструментария, позволяющими им работать, не влияя на производительность при производстве. Уловка с этими профилировщиками заключается в том, чтобы предоставить нужную информацию разумным способом, чтобы не загружать циклы процессора.

Stackify Retrace — это инструмент APM, который использует ту же технологию, что и Stackify Prefix, с некоторыми корректировками для бесперебойной работы в промежуточной и производственной средах.

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

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

Снимок экрана Retrace: агрегирование веб-запросов за 4 часа

Снимок экрана Retrace: трассировка веб-запросов Tomcat

Зачем вам нужны все 3 профилировщика для вашего приложения?

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

Итак, каково решение для производственной среды? Инструменты APM — это ответ. Инструменты APM нацелены на производственную среду и предоставляют отчет о производительности вашего приложения.

Итак, стандартные профилировщики помогают в разработке, а инструменты APM помогают в производстве. Вам может быть интересно, зачем нужны облегченные профилировщики транзакций.

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

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

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

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

Почему некоторые профилировщики Java такие дорогие?

XRebel — отличный инструмент, но он стоит 365 долларов в год. Stackify Prefix бесплатен и предоставляет почти те же функции.

Самая большая проблема с решениями APM, безусловно, заключается в их цене. Они традиционно были настолько дорогими, что их могли себе позволить только крупнейшие предприятия.

Нет смысла тратить примерно 100 долларов в месяц на сервер в Azure или AWS, а затем тратить почти 200 долларов в месяц на такой продукт, как New Relic.

Инструменты мониторинга не должны стоить дороже серверов!

Подробнее: Цены на APM теперь доступны для всех разработчиков, и почему они должны заботиться об этом

Завершение

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

Ответ кроется в природе вашего приложения.

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

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

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

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

Руководство по профилировщикам Java. Профилировщики Java и APM (Приложение… | by Thilina Ashen Gamage | Platform Engineer

Список популярных профилировщиков JVM командной строки

  • Инструмент командной строки, поставляемый со стандартным JDK (без процесса установки / настройки)
  • Полезно для мониторинга Память JVM, определение размера кучи и сбор мусора с использованием командной строки
  • Использует встроенные инструменты в JVM, которые включены по умолчанию (нет необходимости запускать JVM с помощью специальных команд)
  • Идентифицировать целевой процесс Java с помощью идентификатор виртуальной машины (VMID)
  • Если вам нужен только текущий статус использования памяти (вместо мониторинга), используйте jmap

Использование jstat

1) Запустите вашу программу Java с некоторыми предопределенными ограничениями производительности

 java -Xmx120m -Xms30m -Xmn10m -XX: PermSize = 20m -XX: MaxPermSize = 20m -XX: + UseSerialGC AwesomeJavaProgram 

2) Получите идентификатор процесса

 пс aux | grep java 

3) Запустите jstat с опцией -gc на терминале, чтобы начать мониторинг использования памяти кучи JVM

 jstat -gc 21167 1000 

Здесь последний аргумент (1000) — интервал выборки между каждым выводом, поэтому будет печатать данные о памяти и сборке мусора каждую секунду.

jstat gc options (Изображение: Betsol.com) — здесь вы можете увидеть важность изучения модели памяти Java и сборки мусора

  • Инструмент командной строки, поставляемый со стандартным JDK (без процесса установки / настройки)
  • Полезно для распечатки текущей статистики, связанной с памятью (сводка кучи, гистограмма кучи объектов Java, статистика загрузчика классов, информация об объектах, ожидающих завершения, дамп кучи Java в двоичном формате hprof ) для работающей виртуальной машины или файла ядра
  • Особенно полезно для проверки базовых конфигураций и алгоритмы
  • Рекомендуется использовать последнюю версию утилиты, jcmd (начиная с JDK 8) вместо jmap , для расширенной диагностики и снижения накладных расходов на производительность
  • Если вы хотите контролировать использование памяти (вместо текущего использования) , используйте jstat

Использование jmap для деталей кучи JVM

 jmap –heap  

90 103 Использование jmap для создания дампа кучи

 jmap –dump: file =   
  • Инструмент командной строки, поставляемый со стандартным JDK (без процесса установки / настройки)
  • Полезно для отправки диагностических командных запросов в JVM

Использование jcmd для создания дампа кучи

 jcmd  GC. heap_dump filename =  
  • Инструмент командной строки, поставляемый со стандартным JDK (без процесса установки / настройки)
  • Полезно для просмотра топологии объекта в снимке кучи (он же дамп кучи)
  • Заменяет инструмент анализа кучи ( HAT)
  • Анализирует дамп кучи в двоичном формате (например, дамп кучи, созданный jcmd)
  • Может помочь отладить непреднамеренное отношение объекта (язык Java эквивалент утечки памяти — объект, который не требуется больше, но сохраняется благодаря ссылкам через некоторый путь из корневого набора)
  • e.грамм. 1) непреднамеренная статическая ссылка на объект остается после того, как объект больше не нужен
  • например. 2) наблюдатель или слушатель не может отменить регистрацию своего объекта, когда он больше не нужен
  • например. 3) поток, который ссылается на объект, не завершается, когда он должен

Использование jhat для анализа дампа кучи

 jhat  
  • Инструмент командной строки, поставляемый со стандартным JDK (без процесса установки / настройки)
  • Полезно для кучи и профилирования ЦП при анализе производительности, конфликтов блокировок, утечек памяти и других проблем
  • Работает как библиотека динамической компоновки (DLL), которая взаимодействует с JVM с помощью интерфейса Java Virtual Machine Tool (JVMTI)
  • Записывает информацию профилирования в файл или сокет в ASCII или двоичном формате
  • Может сообщать об использовании ЦП, статистике распределения кучи, полных дампах кучи и состояниях всех мониторов и потоков в JVM, а также профилях конкуренции

Подробности реализации:

  • HPROF инструктирует JVM отправлять ей соответствующие события в зависимости от типа запрошенного профилирования
  • затем инструмент обрабатывает данные о событиях в информацию профилирования
  • По умолчанию информация профилирования кучи записывается в java. hprof.txt (в ASCII) в текущем рабочем каталоге

Использование hprof для профилирования класса

 java –agentlib: hprof ToBeProfiledClass 

Использование hprof для получения профиля распределения кучи

 javlib hprof = heap = sites Hello.java 

Показывает объем распределения, который происходит в различных частях программы.

Использование hprof для создания дампа кучи

 javac –J-agentlib: hprof = heap = dump Здравствуйте.java 

Он состоит из корневого набора, определенного сборщиком мусора, и записи для каждого объекта Java в куче, к которому можно получить доступ из корневого набора.

Использование hprof для сбора данных об использовании ЦП

 javac –J-agentlib: hprof = cpu = samples Hello.java 

Здесь агент HPROF периодически проверяет стек всех запущенных потоков для записи наиболее частых активных трассировок стека.

Обнаружены 5 лучших профилировщиков Java

Как и в случае со всеми проблемами, имеющими множество решений, часто бывает сложно определить, какое решение для вас лучше всего. То, что работает для других, может не сработать для вас. Когда дело доходит до профилировщиков Java, их много на рынке, и часто бывает сложно определить, в чем различия и что лучше всего подходит для вашего приложения. Даже в этом случае профилирование Java-приложения может оказаться трудным. Вот почему в этом блоге мы рассматриваем пять основных профилировщиков Java, отвечая на следующие вопросы:

  • Какие инструменты профилирования Java обнаруживают наибольшее количество ошибок?
  • Должен ли я использовать более одного профилировщика Java?

Ищете последнюю статистику использования технологии Java? В нашем отчете о производительности Java-разработчиков за 2021 год содержится информация о самых популярных технологиях Java, включая фреймворки, серверы приложений, дистрибутивы JDK и многое другое.

Скачать бесплатный отчет


Почти половина (46,6%) респондентов опроса используют несколько профилировщиков Java

Ранее в этом году мы выпустили наш годовой отчет о производительности разработчиков. Он был основан на опросе производительности, в ходе которого были собраны ответы более 1500 разработчиков, тестировщиков, архитекторов и многих других должностей с интересными названиями. Хорошая новость заключается в том, что мы отдали 0,50 доллара за каждый заполненный опрос в большую благотворительную организацию под названием «Собаки во благо» (ранее — «Собаки для инвалидов»), которая предоставляет собак-поводырей детям-инвалидам.

Что такое профилирование Java?

Профилирование Java — это динамический анализ выполнения приложения Java, включая использование памяти, скорость и частоту вызовов функций и многое другое.

Те, кто лукавит, заметят, что первое изображение в этом блоге содержит проценты, которые не составляют в сумме 100%. Причина не в некомпетентности в элементарной математике. Не в этот раз. На этот раз это связано с тем, что вопрос допускал множественные варианты ответов на случай, если люди склонны использовать более одного инструмента профилирования в своих приложениях. Оказалось, что для команд было очень распространено использовать несколько инструментов при профилировании приложения Java, поскольку каждый инструмент имеет тенденцию быть лучше на определенных этапах или жизненном цикле приложения или, возможно, предпочтительнее при поиске определенного типа ошибки производительности.

Хотите найти ошибки? Сделай сам!

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

Инструменты, которые очень хорошо себя зарекомендовали, включают JProfiler, XRebel (который на самом деле больше, чем профилировщик), профилировщик NetBeans, JMC и JProbe. С нашей личной точки зрения, было действительно интересно увидеть XRebel, относительно новый профилировщик на блоке, обнаруживший одни из самых больших ошибок в любом инструменте.Это может быть связано с тем, что он предназначен для использования в процессе разработки, где легче находить и устранять ошибки.

Можете ли вы действительно винить свои инструменты?

Что ж, судя по приведенному ниже графику, вы можете обвинить в отсутствии достаточного количества инструментов, поскольку существует определенная тенденция, показывающая, что вы можете найти больше проблем с производительностью, если используете несколько инструментов. Это помогает показать, что есть правильный инструмент для правильной работы. Однако задание может отличаться, например, вы пытаетесь найти и исправить определенные типы проблем ввода-вывода или узких мест в коде. У вас может быть предпочтительный инструмент для каждой из этих задач. Возможно, вы захотите использовать JMC в производстве, но XRebel в разработке, поскольку каждый инструмент лучше подходит для разных сред.

Какие профилировщики Java являются наиболее популярными?

Пять лучших профилировщиков Java:

  1. VisualVM
  2. JProfiler
  3. Пользовательские инструменты
  4. Java Mission Control
  5. Давайте взглянем на них немного в YourKit

  6. больше глубины.О, мы также отдадим должное XRebel, инструменту повышения производительности для Java-разработчиков, набравшему более 3% голосов, которому на момент публикации опроса не было и года! Мы рассмотрим 5 наших лучших инструментов профилирования Java в обратном порядке, чтобы выявить повышенное напряжение и неопределенность, даже если вы уже знаете, какой из них лучший!


    5.

    Your Kit (используется 15,0% респондентов)

    Профилировщик YourKit — один из наиболее признанных лидеров среди инструментов профилировщика JVM.Как зрелый и универсальный профилировщик, YourKit может выполнять профилирование как ЦП, так и памяти, с интеграцией между основными серверами приложений Java, JDBC и другими платформами для анализа производительности высокого уровня, такого как поиск проблем с синхронизацией и чрезмерных обращений к базе данных. YourKit может работать как в режимах выборки, так и в режимах профилирования с отслеживанием, и смешанный подход помогает ему извлечь максимальную пользу из обоих миров: точность отслеживания фактического выполнения кода и возможность точно контролировать накладные расходы на профилирование.

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

    YourKit, которым пользуются 15% респондентов, не слишком хорошо показывает, сколько ошибок производительности обычно обнаруживается в одном выпуске, но не сильно отстает, в среднем — 4,2 проблемы.


    4. Java Mission Control (используется 17,1% респондентов)

    Java Mission Control — это инструмент мониторинга производительности Java от Oracle, который поставляется с JDK с момента обновления Java версии 7 40. Он включает в себя две консоли JMX и Java. Самописец полета. Java Mission Control работает путем взаимодействия с агентом JMX в JVM, который имеет сервер MBean, который интегрируется со встроенной виртуальной машиной и инструментарием приложений, запускающим в JVM. Это ключевой момент, поскольку он снижает стоимость использования инструмента, поскольку он использует уже существующие крючки. Oracle заявляет, что это обычно значительно ниже 1% затрат на производительность.

    Бортовой самописец с его историческим представлением дает возможность видеть тенденции в вашей JVM. Это дает вам данные, необходимые для поиска утечек памяти, проблем с задержкой при ожидании потоков, проблем с блокировкой и многого другого. Уникальная особенность Java Mission Control заключается в том, что она поставляется с Oracle JDK. Вам не нужно ничего устанавливать или подключать к существующей виртуальной машине, чтобы она заработала.Запустите терминал, перейдите в каталог bin JDK и просто введите jmc .

    Учитывая, что Java Mission Control упакован и поставляется с Oracle JDK, удивительно, что только 17,1% респондентов используют его. Я ожидал, что самая большая проблема, связанная с Java Mission Control, — это осведомленность. Даже сегодня, когда я спрашиваю, сколько людей знают об этом, меньше половины комнаты в конференц-зале поднимут руки вверх. Инструмент показал достаточно хорошие результаты в опросе, обнаружив в среднем 5 проблем с производительностью на выпуск.


    3. Пользовательские внутренние инструменты (используются 20,6% респондентов)

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


    2. JProfiler (используется 25,7% респондентов)

    JProfiler — это комплексный инструмент профилирования кода Java для приложений Java SE и Java EE с плагинами для всех основных IDE, который обеспечивает расширенный анализ собранных данных профиля. Как и в случае с любым профилировщиком, профилирование ЦП — это, пожалуй, самая важная и полезная вещь, которую вы можете получить от JProfiler. Кроме того, JProfiler может отображать представление графа вызовов, где методы представлены цветными прямоугольниками, которые обеспечивают мгновенную визуальную обратную связь о том, где находится медленный код в цепочках вызовов методов, что упрощает поиск узких мест.Профилирование памяти с помощью JProfiler также можно настроить, чтобы получить более или менее подробную информацию, получить больше данных или снизить накладные расходы на производительность. Он может собирать, анализировать и отображать снимки кучи, созданные с помощью HPROF.

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

    Если сравнивать JProfiler и Yourkit, то JProfiler — более используемый профилировщик. Но при сравнении использования JProfiler и VisualVM, VisualVM — более используемый инструмент.


    1. VisualVM (используется 46,5% респондентов)

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

    Одной из наиболее недооцененных функций является возможность мониторинга MXBeans, компонентов управления, которые могут отображать использование пулов потоков, статистику пулов памяти, подробные сведения о частоте сборки мусора и так далее. Типичные проблемы с памятью, такие как анализ дампа кучи, чтобы увидеть, какие объекты занимают большую часть памяти процесса JVM. В то время как другие профилировщики могут предложить более продвинутый подход к профилированию приложений, VisualVM является наиболее подходящим инструментом первого уровня для анализа производительности вашего кода.Учитывая, что он включен в ваш дистрибутив JDK и находится буквально в одном клике, это бесценный инструмент! Неудивительно, что почти каждый второй разработчик использует его либо для полного профилирования приложения, либо в сочетании с другими профилировщиками, чтобы получить хорошее первоначальное впечатление с помощью VisualVM и, возможно, копнуть глубже с чем-то более тяжелым.

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


    XRebel — почетное упоминание! (Потому что это больше, чем профайлер)

    Потому что XRebel был всего год, когда он превысил 3% в нашем опросе, о, и потому что это был второй по величине инструмент для поиска большинства ошибок , о, и потому что мы создали его , мы дадим XRebel и почетную благодарность!

    XRebel — это инструмент повышения производительности для Java, предназначенный для использования в среде разработки.Это java-агент, который инструментирует веб-приложения Java и автоматически внедряет консоль отчетов, подобную виджету, встроенную в представление вашего приложения. Виджет показывает данные о производительности приложения.

    В качестве альтернативы JXL и jconsole XRebel помогает разработчикам исправлять самые неприятные проблемы с производительностью, даже не добавляя плохой код в сборку.

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

    Кроме того, XRebel имеет тесную интеграцию с драйверами баз данных и общими решениями для запросов HTTP и может собирать и отображать активность базы данных, инициированную приложением, и запросы к сторонним веб-службам.Доступ к базе данных и HTTP-вызовы являются наиболее распространенными причинами низкой производительности, и XRebel показывает разработчику доступные данные о них. Это позволяет легко избежать некоторых проблем с производительностью.

    XRebel находит чрезмерный доступ к базе данных, легко обнаруживает проблемы с запросами N + 1, пока все еще находится в разработке. Он понимает, какие объекты забивают память в HTTP-сеансе, когда это происходит во время тестирования разработки. Кроме того, это позволяет разработчикам мгновенно видеть все исключения, происходящие в приложении, даже если они не передаются должным образом в пользовательский интерфейс, то есть скрытое исключение! Хотите узнать, является ли XRebel лучшим профилировщиком Java? Попробуйте бесплатно, нажав кнопку ниже.

    Попробовать XRebel бесплатно

    Заключительные мысли

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

    • Люди, которые тестируют свое приложение на производительность с помощью нескольких инструментов профилирования кода Java, обычно обнаруживают больше проблем с производительностью, чем использование одного.
    • Visual VM — это наиболее часто используемый профилировщик Java.
    • Рынок профилирования Java довольно хорошо разбросан по различным инструментам.
    • Пользовательские инструменты показали себя очень хорошо, когда респонденты сообщили, сколько ошибок производительности они обнаружили с их помощью.
    • JProfiler и профилировщик NetBeans обнаружили больше всего ошибок производительности среди наших респондентов.
    • XRebel по крайней мере на одном уровне с ними, но это не совсем профайлер, поэтому он заслуживает особого внимания.

    Надеюсь, этот пост был вам полезен! Если вы это сделали и хотите получить дополнительную информацию о профилировании приложения Java, обязательно ознакомьтесь с полным отчетом по одной из ссылок на кнопки выше. Я тоже размещу ссылку на него здесь, чтобы у вас не было оправдания, чтобы не просмотреть его! Я хотел бы услышать ваши мысли, так почему бы не прокомментировать ниже свой любимый профилировщик или какую комбинацию, по вашему мнению, лучше всего подходит для вашей среды, или не напишите нам в Twitter по адресу @JRebel_Java.

    Дополнительные ресурсы

    Хотите увидеть лучшие технологии Java в 2020 году? В этом веб-семинаре по запросу представлены результаты нашего ежегодного опроса разработчиков Java с экспертным анализом от JRebel и менеджера по продуктам XRebel Кертиса Джонсона.

    Ищете дополнительную литературу по эффективным технологиям Java? Эти ресурсы заслуживают внимания.

    Начало работы с JRebel

    Попробуйте JRebel с бесплатной 10-дневной пробной версией или посмотрите, сколько вы можете сэкономить, рассчитав сначала рентабельность инвестиций.

    Попробовать бесплатно Найти рентабельность инвестиций

    Как работают профилировщики Java — производительность DZone

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

    Как работают профилировщики Java

    Профилировщики

    проверяют состояние JVM либо путем пассивного прослушивания событий от JVM, либо путем активного запроса состояния JVM.Профилировщики также могут изменять байт-код классов для добавления кода инструментария, например, вставляя событие methodEntered и methodExit в начало и конец метода или вставляя событие objectCreated в конструктор.

    JVM генерирует множество событий, и их можно разделить на два типа: мгновенные события и события продолжительности. Мгновенные события — это разовые события, которые имеют отметку времени и данные о событии. Примеры включают события исключений, события загрузки классов и события выделения объектов.Мгновенные события сообщают нам, что что-то произошло, на что можно отреагировать или просто наблюдать и анализировать. События продолжительности имеют время начала и время окончания и поэтому используются для определения времени для некоторой активности. Примеры включают сборку мусора, которая сообщает вам время начала и окончания сборки мусора, ожидание монитора, которое сообщает вам, как долго поток ждал на объекте, и монитор конкуренции, который сообщает вам, как долго поток ждал освобождения блокировки. .

    В дополнение к сгенерированным событиям JVM также имеет функции профилирования, которые возвращают данные о ее внутреннем состоянии.Наиболее часто используются функции потоков, такие как GetThreadState и GetAllThreads , и функции трассировки стека, такие как GetStackTrace и GetAllStackTraces . Эти данные внутреннего состояния периодически запрашиваются профилировщиком в процессе, известном как выборка, а период выборки — это то, как часто функции вызываются для выборки данных. Например, каждые 20 миллисекунд.

    Анализ производительности с использованием профилировщиков Java

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

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

    Профилировщики ЦП могут получать информацию о выполнении метода двумя способами; путем отбора проб или с помощью приборов.

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

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

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

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

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

    Для получения дополнительной информации о том, как настроить Java-приложение для достижения оптимальной производительности, включая пример, в котором я использую профилировщик в приложении Spring, обнаруживаю некоторые скрытые недостатки производительности и делаю некоторые настройки, ознакомьтесь с моим курсом Pluralsight: Настройка производительности Java.В нем я расскажу об инструментах и ​​методах анализа и устранения проблем с производительностью Java, разделах настройки JVM, профилировании Java и передовых методах написания кода высокопроизводительных приложений.

    Введение в профилирование приложений Java в IDE NetBeans

    NetBeans IDE включает мощный инструмент профилирования, который может предоставить важную информацию о среде выполнения.
    поведение вашего приложения.
    Средство профилирования NetBeans позволяет легко отслеживать состояния потоков, производительность ЦП и
    использование памяти вашим приложением из среды IDE и сопряжено с относительно низкими накладными расходами.

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

    В этом документе вы будете использовать инструмент профилирования для получения данных профилирования о примере приложения Anagram Game,
    простое приложение Java, включенное в IDE.
    Хотя Anagram Game — это очень простой проект приложения Java, вы должны следовать тому же принципу
    шаги для профилирования более крупных и сложных приложений Java, а также проектов веб-приложений и корпоративных приложений.

    В этом документе показано, как использовать IDE для профилирования приложения и получения следующих результатов профилирования:

    • Поведение приложения во время выполнения
    • Процессорное время, используемое методами приложения
    • Создание объекта

    Кроме того, в этом документе показано, как делать и сравнивать снимки результатов профилирования.

    Содержание

    Начало работы

    Предварительные требования

    В этом документе предполагается, что у вас есть некоторые базовые знания или опыт программирования в следующих технологиях:

    • Программирование на Java
    • IDE NetBeans

    Программное обеспечение, необходимое для обучения

    Для этого урока на вашем компьютере должно быть установлено следующее программное обеспечение:

    Примечания.

    Первое профилирование

    При первом использовании инструмента профилирования среде IDE необходимо выполнить некоторые начальные операции, чтобы
    обеспечить получение точных результатов профиля и интегрировать инструмент в проект.
    Чтобы продемонстрировать это, вы сначала создадите проект AnagramGame, а затем запустите калибровку.
    IDE автоматически выполнит интеграцию при первом профилировании проекта AnagramGame.

    Создание образца проекта

    В этом документе вы профилируете образец приложения Anagram Game.
    Для этого вы сначала воспользуетесь мастером создания проекта, чтобы создать образец приложения.
    и установите проект в качестве основного.

    Чтобы создать приложение Anagram Game, выполните следующие действия.

    1. Выберите «Файл»> «Новый проект» (Ctrl-Shift-N; ⌘-Shift-N на Mac) в главном меню.
    2. В мастере создания проектов выберите категорию «Примеры»> «Java».
    3. Выберите проект Anagram Game. Нажмите кнопку «Далее.
    4. Укажите место для проекта. Щелкните Готово.

      При нажатии кнопки «Готово» в среде IDE создается образец проекта игры Anagram.

    5. Выберите «Выполнить»> «Установить главный проект»> «AnagramGame» в главном меню.

    После того, как вы установите проект в качестве основного, вы увидите, что имя проекта Anagram Game выделено жирным шрифтом в окне «Проекты».По умолчанию, при использовании IDE для профилирования проекта, IDE профилирует основной проект.
    Если в качестве основного проекта не выбран ни один проект, IDE профилирует выбранный проект.
    в окне «Проекты».

    Первое использование профилировщика

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

    Калибровку нужно выполнить только один раз.
    Однако, если вы внесете какие-либо существенные изменения в конфигурацию машины, которые могут повлиять на производительность машины,
    вам следует снова запустить калибровку. Вы можете запустить калибровку в любое время, выполнив следующие шаги.

    1. Выберите Advanced Commands > Manage Calibration Data в меню Profile.
    2. Выберите платформу Java.Щелкните Калибровать.

    По завершении калибровки появляется диалоговое окно.
    Вы можете нажать «Показать подробности», чтобы открыть диалоговое окно с информацией о результатах калибровки.
    Данные калибровки для каждой платформы Java сохраняются в каталоге .nbprofile в вашем домашнем каталоге.

    Примечание. Если вы используете IDE NetBeans 7.4 или более ранней версии,

    выберите Advanced Commands > Run Profiler Calibration из меню Profile
    и выберите платформу Java в диалоговом окне «Выбор платформы Java для калибровки».

    Выбор задачи профилирования

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

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

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

    Диалоговое окно «Выбор задачи профилирования» является основным интерфейсом для запуска задачи профилирования.После выбора задачи вы можете изменить ее параметры для точной настройки получаемых результатов.
    Для каждой из задач профилирования вы также можете создавать и сохранять настраиваемые задачи профилирования на основе задачи.
    Когда вы создаете настраиваемую задачу профилирования, настраиваемая задача отображается в диалоговом окне «Выбор задачи профилирования».
    так что вы можете легко найти и запустить свои пользовательские настройки позже.
    При создании настраиваемой задачи профилирования вы можете изменить более сложные параметры профилирования.
    щелкнув Дополнительные параметры в диалоговом окне «Выбор задачи профилирования».

    Мониторинг приложения

    Когда вы выбираете задачу «Монитор», целевое приложение запускается без каких-либо инструментов.
    При мониторинге приложения вы получаете высокоуровневую информацию о нескольких важных свойствах целевой JVM.
    Поскольку мониторинг приложения требует очень малых накладных расходов, вы можете запускать приложение в этом режиме в течение продолжительных периодов времени.

    Чтобы отслеживать приложение Anagram Game, выполните следующие действия.

    1. Убедитесь, что проект AnagramGame установлен в качестве основного проекта.
    2. Выберите «Профиль»> «Профиль главного проекта» в главном меню.

      Или щелкните правой кнопкой мыши узел проекта в окне «Проекты» и выберите «Профиль».

    3. Выберите «Монитор» в диалоговом окне «Выбор задачи профилирования».
    4. При необходимости выберите дополнительные параметры монитора. Щелкните «Выполнить».

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

    При нажатии кнопки «Выполнить» среда IDE запускает приложение, и на левой панели среды IDE открывается окно «Профилировщик».
    Окно Profiler содержит элементы управления, которые позволяют вам делать следующее:

    • Управление задачей профилирования
    • Просмотр статуса текущей задачи профилирования
    • Показать результаты профилирования
    • Управление снимками результатов профилирования
    • См. Основную статистику телеметрии

    Вы можете использовать элементы управления в окне Profiler или в главном меню, чтобы открыть окна, в которых вы можете просматривать данные мониторинга.Вы можете использовать окно «Обзор телеметрии», чтобы быстро получить обзор данных мониторинга в режиме реального времени.
    Если навести курсор на график, можно увидеть более подробную статистику данных, отображаемых на графике.
    Вы можете дважды щелкнуть любой из графиков в окне «Обзор телеметрии», чтобы открыть более крупный и подробный
    версия графика.

    Если обзор не открывается автоматически, вы можете выбрать Window> Profiling> VM Telemetry Overview, чтобы
    открыть обзор в окне вывода.Вы можете открыть окно Обзор телеметрии виртуальной машины и просмотреть данные мониторинга в любое время во время любого сеанса профилирования.

    Анализ производительности процессора

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

    Для анализа производительности ЦП вы выбираете способ профилирования приложения с помощью
    выбрав один из следующих вариантов.

    • Быстрая (выборка).
      В этом режиме IDE делает выборку приложения и периодически выполняет трассировку стека.
      Этот вариант менее точен, чем инструментальные методы, но накладные расходы ниже.Эта опция может помочь вам найти методы, которые вы, возможно, захотите использовать.
    • Продвинутый (с инструментами).
      В этом режиме инструментируются методы профилированного приложения.
      IDE записывает, когда потоки входят в методы проекта и выходят из них, что позволяет увидеть, сколько времени затрачено на каждый метод.
      При входе в метод потоки генерируют событие «входа в метод».
      При выходе из метода потоки генерируют соответствующее событие «выхода из метода».Записываются временные метки для обоих этих событий. Эти данные обрабатываются в реальном времени.

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

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

      Указание корневого метода может значительно снизить накладные расходы на профилирование.
      Для некоторых приложений указание корневого метода может быть единственным способом получить какие-либо подробные и / или реалистичные данные о производительности.
      потому что профилирование всего приложения может генерировать так много данных профилирования
      что приложение становится непригодным для использования или даже может вызвать сбой приложения.

    Примечание:
    Режим быстрого профиля недоступен в IDE NetBeans 7.0 и более ранних версиях.
    Вы можете использовать только инструменты для получения результатов профилирования, но вы можете выбрать инструмент для всего
    application или ограничьте инструментирование частью приложения, указав один или несколько корневых методов.

    Вы можете дополнительно настроить, сколько кода профилируется, используя фильтр для ограничения
    источники, которые оснащены инструментами.

    Теперь вы будете использовать среду IDE для анализа производительности ЦП приложения Anagram Game.
    Вы выберете опцию «Часть приложения», а затем выберите WordLibrary.java в качестве корня профилирования.
    Выбирая этот класс в качестве корня профилирования, вы ограничиваете профилирование методами этого класса.

    1. Нажмите кнопку «Стоп» в окне «Профилировщик», чтобы остановить предыдущий сеанс профилирования (если он еще выполняется).
    2. Выберите «Профиль»> «Профиль главного проекта» в главном меню.
    3. Выберите ЦП в диалоговом окне «Выбор задачи профилирования».
    4. Выберите Расширенный (инструментальный) .

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

    5. Нажмите , настроить , чтобы открыть диалоговое окно «Редактировать корни профилирования».
    6. В диалоговом окне «Редактировать корни профилирования» разверните узел AnagramGame и выберите
      Источники / com.toy.anagrams.библиотека / WordLibrary.
      При профилировании проекта вы можете указать несколько корневых методов.
    7. Нажмите кнопку «Дополнительно», чтобы открыть диалоговое окно «Изменить корни профилирования (дополнительно)», в котором представлены дополнительные параметры.
      для добавления, редактирования и удаления корневых методов.

      Вы можете видеть, что WordLibrary указан как корневой метод. Нажмите кнопку ОК, чтобы закрыть диалоговое окно «Изменить корни профилирования (дополнительно)».

    8. Нажмите «ОК», чтобы закрыть диалоговое окно «Редактировать корни профилирования».

      После выбора корня профилирования вы можете нажать изменить
      в диалоговом окне «Выбор задачи профилирования», чтобы изменить выбранный корневой метод.

    9. Выберите Профиль только классы проекта в качестве значения фильтра.

      Фильтр позволяет вам ограничивать классы, которые инструментируются.
      Вы можете выбрать один из предустановленных фильтров профилирования в среде IDE или создать свои собственные фильтры.
      Вы можете нажать Показать значение фильтра , чтобы увидеть список классов, которые будут профилированы при применении выбранного фильтра.

    10. Нажмите «Выполнить» в диалоговом окне «Выбор задачи профилирования», чтобы начать сеанс профилирования.

    При нажатии кнопки «Выполнить» среда IDE запускает приложение и запускает сеанс профилирования.
    Чтобы просмотреть результаты профилирования, нажмите «Текущие результаты» в окне «Профилировщик», чтобы открыть окно «Текущие результаты».
    В окне «Живые результаты» отображаются данные профилирования, собранные на данный момент.
    По умолчанию отображаемые данные обновляются каждые несколько секунд.При анализе производительности процессора в окне Live Results отображается информация о времени.
    потрачено на каждый метод и количество вызовов каждого метода.
    Вы можете видеть, что в приложении Anagram Game изначально вызываются только выбранные корневые методы.

    Вы можете быстро перейти к исходному коду, содержащему любой из перечисленных методов, щелкнув правой кнопкой мыши
    имя метода и выбор «Перейти к источнику». Когда вы нажимаете «Перейти к исходному тексту», класс открывается в редакторе исходного кода.

    Анализ использования памяти

    Задача «Анализ использования памяти» предоставляет данные об объектах, которые были выделены в целевом приложении, такие как число,
    тип и расположение выделяемых объектов.

    Чтобы проанализировать производительность памяти, вы выбираете, сколько данных вы хотите получить, выбрав один из следующих вариантов.

    • Быстро.
      Когда выбран этот параметр, профилировщик пробует приложение для
      предоставлять данные, которые ограничиваются живыми объектами.Эта опция отслеживает только живые объекты и не отслеживает выделение при инструментировании.
      Если вы выберете эту опцию, невозможно записать стековые трассировки или использовать точки профилирования.
      Этот вариант требует значительно меньших накладных расходов, чем расширенный вариант.
    • Продвинутый.
      Когда выбран этот вариант, приложение может получить информацию о номере,
      тип и расположение выделенных объектов.Все классы, которые в настоящее время загружаются целевой JVM (и каждый новый класс по мере его загрузки)
      снабжены инструментами для получения информации о распределении объектов.
      Вам необходимо выбрать эту опцию, если вы хотите использовать точки профилирования, когда
      анализировать использование памяти или если вы хотите записать стек вызовов.
      Эта опция требует больших затрат на профилирование, чем опция Быстрая.

    Если вы выбираете опцию Advanced, вы также можете установить следующие опции.

    • Запись полного образа жизни объекта. Выберите этот параметр, чтобы записывать всю информацию для каждого объекта, включая количество выживших поколений.
    • Запись трассировки стека для распределений. Выберите этот параметр, чтобы записывать полный стек вызовов.
      Этот параметр позволяет просматривать дерево обратных вызовов для вызовов методов при просмотре снимка памяти.
    • Использовать определенные точки профилирования. Выберите этот параметр, чтобы включить точки профилирования.Отключенные точки профилирования игнорируются. Если этот флажок снят, все точки профилирования в проекте игнорируются.

    Счетчик накладных расходов в окне «Выбор задач профилирования» дает приблизительную оценку увеличения или уменьшения
    в накладных расходах профилирования в соответствии с выбранными вами параметрами профилирования.

    В этом упражнении вы будете использовать среду IDE для анализа производительности памяти приложения Anagram Game.
    Вы выберете опцию Advanced и
    выберите трассировку стека записей для распределений , чтобы среда IDE записывала полный стек вызовов.Выбрав эту опцию, когда вы сделаете снимок памяти, вы сможете просмотреть дерево обратных вызовов.

    1. Нажмите кнопку «Стоп» в окне «Профилировщик», чтобы остановить предыдущий сеанс профилирования (если он еще выполняется)
      и остановите приложение Anagram Game.
    2. Выберите «Профиль»> «Профиль главного проекта» в главном меню.
    3. Выберите «Память» в диалоговом окне «Выбор задачи профилирования».
    4. Выберите Advanced .
    5. Выберите Трассировку стека записей для распределений . Щелкните Выполнить, чтобы начать сеанс профилирования.

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

    При нажатии кнопки «Выполнить» среда IDE запускает приложение и запускает сеанс профилирования.
    Чтобы просмотреть результаты профилирования, нажмите «Текущие результаты» в окне «Профилировщик», чтобы открыть окно «Текущие результаты».Окно Live Results отображает информацию о размере и количестве объектов, которые размещены в нашем проекте.

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

    Создание снимков

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

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

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

    Создание и сравнение снимков памяти

    Для приложения Anagram Game вы можете сделать снимок результатов, чтобы увидеть трассировку стека распределения для
    объекты типа String. Затем вы можете сделать еще один снимок и сравнить их.
    Сравнивая снимки памяти, вы можете увидеть, какие объекты были созданы или освобождены из кучи за интервал времени.
    между моментом, когда вы сделали два снимка.
    Снимки должны быть сопоставимы, что означает, что тип профилирования (например,g., Распределение по сравнению с живучестью)
    и количество отслеживаемых объектов должно совпадать.

    В этом упражнении вы сделаете снимок и сохраните его в своем проекте.
    Затем вы сделаете второй снимок и сравните второй снимок с сохраненным снимком.

    1. Убедитесь, что сеанс профилирования все еще продолжается.
      (Если вы остановили сеанс профилирования, повторите шаги для анализа производительности памяти и откройте
      Окно живых результатов.)
    2. Щелкните правой кнопкой мыши строку, содержащую java.lang.String в
      В окне «Живые результаты» выберите «Сделать снимок» и «Показать трассировки стека распределения».

      Вы можете использовать фильтр в окне Live Results, чтобы помочь вам найти линию.

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

    3. Нажмите кнопку «Сохранить снимок в проект» на панели инструментов снимка (Ctrl-S; ⌘-S на Mac), чтобы сохранить снимок памяти в свой проект.
      Когда вы сохраняете снимок в свой проект, снимок добавляется в список сохраненных снимков Anagram Game в окне Profiler.
      По умолчанию моментальные снимки физически сохраняются в каталоге nbproject / private / profiler вашего проекта.
      К сохраненным снимкам добавляется расширение.суффикс nps.

      Примечание. Вы можете сохранять снимки в любом месте файловой системы, однако только снимки сохраняются в папке по умолчанию в вашей файловой системе.
      проект будет указан в окне Профилировщика.
      Вы также можете нажать кнопку «Сохранить текущий вид в изображение» на панели инструментов снимка, чтобы сохранить снимок.
      в виде файлов изображений (.png), которые можно просматривать вне среды IDE.

    4. Сделайте еще один снимок, нажав кнопку «Сделать снимок собранных результатов» на панели инструментов «Текущие результаты» (или
      или нажмите кнопку «Сделать снимок» в окне «Профилировщик»).Сохраните снимок.
    5. В окне одного из снимков памяти нажмите кнопку «Вычислить разницу».
      ()
      на панели инструментов снимка.
      Либо выберите «Профиль»> «Сравнить снимки памяти» в главном меню.
    6. В окне «Выбрать снимок для сравнения» выберите один из открытых снимков из списка. Щелкните ОК.

      Когда снимок памяти открыт, вы можете сравнить его с другими сопоставимыми снимками памяти.
      Вы можете сравнить снимок с несохраненными снимками, которые открыты в данный момент, или с сохраненными снимками.
      к проекту или где-либо еще в вашей системе.

      При нажатии кнопки «ОК» открывается окно «Сравнение живучести», в котором отображаются различия между двумя снимками памяти.

    Сравнение снимков похоже на снимок памяти, но отображает только различия между двумя сравниваемыми снимками.
    Если вы посмотрите на числа в столбцах, вы увидите, что знак плюса (+) указывает на то, что значение увеличилось.
    а знак минус (-) указывает, что значение уменьшилось.В столбце Live Bytes графическая полоса позволяет легко увидеть разницу в выделенных байтах.
    Если левая половина ячейки в этом столбце зеленая, это означает, что количество выделенных байтов для этого объекта меньше, когда был сделан второй снимок.
    чем это было, когда был взят первый.
    Если правая половина ячейки красная, это означает, что количество выделенных байтов во втором снимке выше, чем в первом.

    Примечание. Вы также можете установить точки профилирования «Сделать снимок», чтобы
    точный контроль над моментом создания снимков. Подробнее о том, как делать снимки с помощью точек профилирования, см.
    Использование точек профилирования в IDE NetBeans.

    См. Также

    На этом завершается введение в профилирование приложения с помощью IDE NetBeans.
    В этом документе продемонстрированы основы использования IDE для профилирования простого
    NetBeans и просмотрите результаты профилирования.Шаги, описанные выше, могут быть применены
    при профилировании большинства проектов. Профилирование более сложных проектов, таких как корпоративные приложения
    а для проектов свободной формы могут потребоваться дополнительные действия по настройке.

    Для получения более подробной информации о настройках и функциях профилирования, не описанных в этом документе,
    обратитесь к документации, включенной в продукт и доступной в пункте меню «Справка».

    Соответствующую документацию можно найти на следующих ресурсах:

    верх

    Инструмент профилирования Java — AppPerfect

    Производительность Java

    Большинство приложений сегодня спроектированы и разработаны для одновременного использования большим количеством пользователей.Иногда в коде есть основные проблемы, которые могут вызывать состояния ошибок, такие как утечки памяти, состояния гонки, блокировки потоков и т. Д., Пренебрежение которыми увеличивает использование ресурсов за пределами ограничений, вызывая замедление работы приложения или даже сбой. Профилирование может помочь вам обнаружить эти проблемы и оптимизировать ваши Java-приложения. Мы постараемся понять несколько важных аспектов профилирования Java. Следующий документ поможет вам понять, что такое профилирование Java, почему требуется профилирование Java и как можно успешно реализовать профилирование Java для своих приложений Java с помощью AppPerfect.


    Что такое профилирование Java?

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

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

    Таким образом, профилирование

    Java можно резюмировать как измерение статистики приложения Java, в частности, в терминах:

    • Время ЦП, используемое методом
    • Используемая память
    • Информация о вызове метода
    • Создаваемые объекты
    • Сборщик мусора

    Профилирование Java с помощью AppPerfect

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

    AppPerfect Java Profiler признан его клиентами наиболее доступным, рентабельным, эффективным, надежным и точным решением.Теперь мы попытаемся понять, как можно успешно реализовать профилирование Java для своего приложения Java с помощью AppPerfect Java Profiler.

    Настройка приложения Java для профилирования:

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

    1. Запустите продукт AppPerfect Java Profiler и выберите пункт меню File — & gt New .. , чтобы создать новый проект профилирования Java.Подробнее о создании нового проекта см. В главе «Создание нового проекта». Подробнее о настройке свойств проекта см. В главе «Настройка свойств проекта».
    2. Укажите имя проекта и выберите вкладку «Цель», чтобы настроить целевое приложение для профилирования. Вы можете профилировать серверное / веб-приложение или можете профилировать загрузочное / настольное приложение. На этой вкладке вам необходимо настроить конфигурацию запуска для целевого приложения. Серверные приложения обычно представляют собой приложения, которые развертываются на сервере приложений J2EE, например BEA WebLogic, IBM WebSphere, JBoss, Apache Tomcat, Oracle Server, SunOne и т. Д.Локальные / настольные приложения обычно запускаются на вашем локальном компьютере как однопользовательская система. Дополнительные сведения см. В главе «Настройка параметров целевого приложения».

    3. Когда вы закончите настройку проекта, выберите Project — & gt Run пункт меню, чтобы начать профилирование Java-приложения. Для получения дополнительной информации см. Главу «Профилирование приложения».
    Возможность комплексного анализа кучи:

    Средство профилирования Java

    AppPerfect обеспечивает поддержку создания полного моментального снимка кучи.JVM может предоставить снимок всей памяти JVM. Гарантируется, что этот дамп памяти является точным состоянием памяти JVM на момент создания моментального снимка. Такой снимок кучи может предоставить бесценные данные для понимания того, как выделяется и используется память. В частности, моментальный снимок кучи предоставляет сводку классов, экземпляров, выделений, исходящих и входящих ссылок на объекты, которые хранятся в куче в определенное время.

    Чтобы сделать снимок кучи, выберите проект — & gt Сделать снимок… пункт меню. После создания снимка можно увидеть список классов / объектов, присутствующих в куче во время создания снимка, подробности любого класса / объекта можно просмотреть, дважды щелкнув его. Дополнительные сведения о снимке состояния кучи см. В главе «Браузер кучи».

    Отслеживание распределения и сборка мусора:

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

    Доступ к представлениям «Профилирование памяти» можно получить из дерева навигации, выбрав узел «Профилирование памяти». Для получения дополнительной информации см. Главу «Профилирование памяти».

    Обнаружение возможных утечек памяти:

    Утечки памяти можно определить как ошибку приложения, при которой память выделяется, но никогда не освобождается, и все ссылки на эту память теряются системой. Утечки памяти могут привести к неконтролируемому росту памяти, что замедлит работу вашего приложения и в конечном итоге приведет к его сбою.Функция «Сценарии утечки памяти» предназначена для помощи в обнаружении возможных утечек памяти в вашем приложении. Чтобы запустить сценарий, нажмите кнопку-переключатель «Начать сценарий». AppPerfect Java Profiler вызовет сборку мусора и зарегистрирует все живые объекты, присутствующие в памяти после сборки мусора. Выполняйте действия в своем приложении в соответствии со своим сценарием использования. Когда вы закончите выполнение сценария, нажмите кнопку-переключатель «Остановить сценарий». AppPerfect Java Profiler снова вызовет сборку мусора и зарегистрирует все живые объекты в памяти после сборки мусора.Затем он обнаружит различия в живых объектах между началом и концом сценария. Объекты, которые создаются во время выполнения сценария, но не удаляются сборщиком мусора, отображаются на вкладке «Сведения о сценарии». Для дальнейшего изучения и отслеживания этих объектов сделайте снимок кучи и сконцентрируйтесь только на тех классах, для которых сообщается об утечках объектов.

    Доступ к представлению Сценарии утечки памяти можно получить из дерева навигации, выбрав узел Сценарии утечки памяти.Для получения дополнительной информации см. Главу «Профилирование утечки памяти Java».

    Поиск узкого места в производительности:

    Профилирование ЦП

    позволяет подробно изучить взаимодействие JVM с ЦП. Понимание того, как использовались ваши циклы процессора, может помочь вам определить узкие места в производительности. С помощью AppPerfect Java Profiler вы можете подробно просмотреть методы и их относительное время и потребление ресурсов со ссылкой на ЦП. Профилирование ЦП предоставляет вам полную информацию о методе, включая имя метода, имя класса, подпись, счетчик вызовов, собственное время и общее время выполненных методов.Таким образом, вы можете сразу увидеть, сколько раз был вызван метод и сколько времени потребовалось для его выполнения, а также время, которое потребовалось для выполнения в целом, включая выполнение любых процедур или вызовов методов.

    Доступ к представлениям профилирования ЦП можно получить из дерева навигации, выбрав узел «Профилирование ЦП». Для получения дополнительной информации см. Главу «Профилирование производительности Java».

    Проблемы отслеживания, связанные с потоком:

    Использование нескольких потоков необходимо для создания масштабируемых и надежных приложений.Работа с несколькими потоками вызывает другие проблемы, такие как параллелизм и конкуренция за ресурсы. Анализ потоков предоставляет информацию о потоках, которые создаются и используются профилируемым приложением. Различные аналитические отчеты показывают состояние потоков и мониторов, которые помогают обнаруживать состояния гонки, конфликты и взаимоблокировки, если таковые имеются в вашем приложении.

    Доступ к представлениям профилирования потоков можно получить из дерева навигации, выбрав узел «Профилирование потоков».За подробностями обращайтесь к главе «Профилирование потоков Java».

    Профилирование по требованию:

    Профилирование JVM требует, чтобы профилировщик подключился к работающему приложению и собрал всю необходимую информацию из него. Обычно это делается на стадии разработки. Этот тип профилирования называется «Режим разработки». Однако было замечено, что часто приложение, профилированное во время разработки, не вызывает проблем, но после развертывания они возникают. В таких случаях возникает необходимость напрямую профилировать производственную JVM.Поэтому для удовлетворения потребностей в профилировании приложения, которое уже находится в производстве, AppPerfect Java Profiler обеспечивает профилирование «по запросу».
    Профилирование в режиме «По запросу» или «Производство» позволяет профилировать развернутое приложение. Это отличается от профилирования в режиме разработки, когда вы профилируете свое находящееся в стадии разработки приложение. Профилирование по требованию можно определить как профилирование JVM развернутого приложения по мере необходимости, без необходимости запускать и останавливать JVM вместе с профилированием.Это значительно сокращает накладные расходы вашей системы, поскольку вы можете запустить приложение для профилирования один раз, а затем подключиться к нему для профилирования «по требованию» без необходимости останавливать его, когда вы хотите прекратить профилирование или повторно запустить профилирование снова. Чтобы изменить тип профилирования на режим по требованию, выберите Проект -> Свойства .. пункт меню и на вкладке «Тип профилирования» измените параметр на профилирование по требованию.
    Режим разработки Профилирование собирает дополнительную информацию о профилируемой целевой JVM, поскольку все методы всегда находятся в ведении профилировщика Java.Однако при профилировании по требованию Java Profiler собирает информацию только от методов, которые были запущены и активны во время сеанса профилирования.

    Возможность удаленного профилирования приложений:

    AppPerfect Java Profiler поддерживает удаленное профилирование приложений. Все, что для этого требуется, — это установить AppPerfect Java Profiler на удаленном компьютере. AppPerfect использует свою удаленную службу для получения данных профилирования с удаленного сервера.
    Чтобы настроить Java Profiler для удаленного профилирования, выберите «Проект » -> «Настройки».. Пункт меню и на вкладке «Общие» задают настройки целевой машины, на которой будет выполняться профилируемое приложение. Дополнительные сведения см. В главе «Профилирование удаленного приложения Java».

    Поддержка нескольких платформ и серверов приложений:

    AppPerfect Java Profiler легко интегрируется в вашу среду: мы обеспечиваем поддержку профилирования на широком спектре платформ, включая Microsoft Windows 2000 / XP / 2003 / Windows 7, Linux x86, Solaris, MAC OSX и AIX, как для 32-разрядных, так и для 64-разрядных версий. -битные JVM.AppPerfect поддерживает интеграцию с большинством серверов приложений, что позволяет мгновенно приступить к профилированию. В настоящее время интеграция поддерживается для серверов приложений Tomcat, WebLogic, WebSphere, WSAD, RAD, JBoss, JRun, J2EE, Resin, Oracle, Jetty, Orion, SunOne. Для других пользователей, которых нет в этом списке, вы можете следовать инструкциям по профилированию и настроить необходимый сервер приложений для профилирования. В общем, AppPerfect может профилировать любое приложение / сервер на основе Java.

    Профилирование Java с поддержкой коллективного доступа:

    Инженеры-испытатели

    могут поделиться результатами профилирования с разными членами команды.Результатами профилирования можно поделиться с разработчиками, которые они могут использовать для отслеживания проблем, связанных с производительностью и памятью в приложении. AppPerfect поддерживает интеграцию с системой управления версиями Subversion (SVN). Подробнее об интеграции с сервером Subversion см. В главе Конфигурация Team Server.

    Поддержка интеграции IDE:

    Интеграция

    IDE — очень полезная функция в продуктах AppPerfect. После интеграции продукта в IDE вы можете запустить IDE и выполнить профилирование Java для ваших проектов Java / J2EE из среды IDE.Вы можете интегрировать приложения AppPerfect с Eclipse, IBM Rational Application Developer (RAD), NetBeans, IntelliJ Idea, JBuilder, Oracle JDeveloper и BEA Workshop studio.

    Выберите Инструменты -> Интеграция IDE , чтобы выполнить интеграцию с любой из поддерживаемых IDE. Подробнее об интеграции с IDE см. В главе «Интеграция с IDE».

    Интегрируйте профилирование Java в свой ежедневный процесс сборки с помощью сценария ANT и поддержки командной строки:

    AppPerfect поддерживает плавную интеграцию с процессом сборки.Вам просто нужно экспортировать проект профилирования Java как сценарий ANT или сценарий командной строки, а затем вы можете выполнить эти экспортированные сценарии из процесса сборки. Таким образом вы можете убедиться, что каждая сборка профилирована перед окончательным развертыванием. Чтобы экспортировать проект как сценарий Ant, выберите пункт меню «Инструменты » -> «Экспортировать проект как сценарий ANT …». . Подробные сведения о выполнении сценария ANT см. В главе «Выполнение сценария ANT».

    Вывод:

    AppPerfect Java Profiler помогает диагностировать и решать проблемы производительности, утечки памяти и проблемы многопоточности в ваших серверных приложениях Java или J2EE, чтобы обеспечить высочайший уровень стабильности и масштабируемости для ваших приложений.AppPerfect Java Profiler предоставит вам анализ первопричин этих проблем и поможет вам их решить.
    AppPerfect Java Profiler предоставляет вам унифицированное представление всех ресурсов, таких как память, методы, потоки и мониторы, чтобы помочь вам понять поведение вашей JVM, характеристики производительности и т. Д., Чтобы быстро добраться до сути проблемы. AppPerfect Java Profiler — это комплексное решение для настройки производительности Java с поддержкой анализа кучи, анализа потоков, анализа монитора и обнаружения взаимоблокировок.Это один из лучших и лучших профилировщиков, доступных на большом рынке профилировщиков.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *