Сведения о вопросе

HEIGTH

16:50, 24th August, 2020

Теги

java   profiling    

Если у вас есть приложение Java, которое потребляет CPU, когда оно ничего не делает, как вы определяете, что оно делает?

Просмотров: 486   Ответов: 8

Я вызываю поставщика Java API, и на некоторых серверах кажется, что JVM переходит в цикл опроса с низким приоритетом после входа в API (CPU при использовании 100%). То же самое приложение на других серверах не проявляет такого поведения. Это происходит на WebSphere и Tomcat. Окружение сложно настроить, поэтому трудно попытаться сделать что-то вроде профилирования в Eclipse.

Есть ли способ профилировать (или какой-то другой метод проверки) существующее приложение Java, работающее в Tomcat, чтобы узнать, какие методы выполняются, пока оно находится в этом состоянии spinwait? Приложение выполняет только один метод, когда оно попадает в это состояние (метод поставщика). Поставщик не может повторить поведение (конечно).


Обновление:

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

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

@Cringe-я немного поэкспериментировал с некоторыми из предложенных вами вариантов. У меня были некоторые проблемы с настройкой JProfiler, это выглядит хорошо (но дорого). В дальнейшем я пошел дальше и добавил плагин Eclipse Profiler, и я буду просматривать различные профилировщики с открытым исходным кодом для сравнения функциональности.



  Сведения об ответе

COOL

16:57, 5th August, 2020

Если вы используете Java 5 или более позднюю версию, вы можете подключиться к своему приложению с помощью jconsole для просмотра всех запущенных потоков. jstack также будет делать дамп стека. Я думаю, что это должно все еще работать даже внутри контейнера, такого как Tomcat.

Оба этих инструмента включены в JDK5 и позже (я предполагаю, что процесс должен быть по крайней мере Java 5, хотя я могу ошибаться)

Обновление: Также стоит отметить, что начиная с JDK 1.6 update 7 теперь есть встроенный профилировщик под названием VisualVM , который может быть запущен с 'jvisualvm'. Похоже, что это проект java.net, поэтому дополнительная информация может быть доступна на этой странице. Я еще не использовал его, но он выглядит полезным для более серьезного анализа.

Надеюсь, это поможет


  Сведения об ответе

pumpa

15:39, 8th August, 2020

Столкнувшись с той же проблемой, я использовал YourKit profiler . Это загрузчик не активируется, если вы на самом деле не подключитесь к нему (хотя он и открывает порт для прослушивания соединений). Сам профилировщик имеет приятный "get amount of time spent in each method" при работе в менее навязчивом режиме.

Другой способ-определить нагрузку CPU (через JNI, так что для этого вам понадобится внешняя библиотека) в потоке "watchdog" с самым высоким приоритетом и начать регистрировать все потоки, когда CPU будет достаточно высоким в течение достаточно долгого времени. Вы можете найти эту статью поучительной.


  Сведения об ответе

davran

17:41, 1st August, 2020

Если JConsole не может быть использован, вы можете

  • нажмите CTRL + BREAK под Windows
  • отправить kill -3 <process id> под Linux

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


  Сведения об ответе

DO__IT

01:09, 17th August, 2020

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

Новый(?) проект из самого проекта eclipse также доступен: http://www.eclipse.org/tptp/ (см. Эту статью). Никогда не пользовался им, так что я не могу сказать, стоит ли это усилий.

Есть также очень хороший список профилировщиков с открытым исходным кодом, доступных по адресу http://www.manageability.org/blog/stuff/open-source-profilers-for-java


  Сведения об ответе

LAST

20:13, 16th August, 2020

JRockit Анализатор Задержки Управления Полетом.

Анализатор задержки, который поставляется с JRockit, показывает вам, что такое JVM "doing", когда он ничего не делает. В последней версии вы можете увидеть задержки для:

  • Java wait/blocked/sleep/parked.
  • Файловый Ввод-Вывод
  • Сетевой Ввод / Вывод
  • Выделение памяти
  • GC паузы
  • JVM задержки, например, генерация кода и загрузка класса
  • Резьбовая подвеска

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

анализатор задержки http://blogs.oracle.com/hirt/WindowsLiveWriter/The.0LatencyAnalyserMigratedfromtheoldBE_7246/latency_graph_2.png

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

Это бесплатно использовать для развития!


  Сведения об ответе

DAAA

02:49, 27th August, 2020

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

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

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


  Сведения об ответе

appple

05:52, 18th August, 2020

VisualVM должен быть профилировщиком от netbeans как автономный. Я пробовал TPTP для eclipse, но visualVm кажется гораздо более приятным вариантом!


  Сведения об ответе

Chhiki

06:24, 23rd August, 2020

Для полноты картины: хотя моя компания более или менее стандартизирована на Eclipse, мы используем Netbeans (6 и выше) с включенным бесплатным профилировщиком ежедневно. Он работает лучше, чем плагин Eclipse TPTP (последний раз проверялся 3 месяца назад), и для нас он устраняет любую потребность в коммерческом профайлере, таком как JProfiler, что отлично, но быстро становится ненужным.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться