Если у вас есть приложение Java, которое потребляет процессор, когда оно ничего не делает, как вы определяете, что оно делает? - PullRequest
12 голосов
/ 16 августа 2008

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

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


Обновление:

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

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

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

Ответы [ 8 ]

15 голосов
/ 16 августа 2008

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

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

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

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

6 голосов
/ 16 августа 2008

Столкнувшись с той же проблемой, которую я использовал YourKit profiler . Его загрузчик не активируется, если вы на самом деле не подключаетесь к нему (хотя он открывает порт для прослушивания соединений). У самого профилировщика есть приятное «получить количество времени, потраченного на каждый метод», работая в менее навязчивом режиме.

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

2 голосов
/ 30 сентября 2008

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

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

  • Java ждет / заблокирован / спит / припаркован.
  • File I / O
  • Сетевой ввод / вывод
  • Распределение памяти
  • GC паузы
  • задержки JVM, например, генерация кода и загрузка классов
  • Резьба подвески

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

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

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

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

2 голосов
/ 23 августа 2008

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

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

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

2 голосов
/ 16 августа 2008

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

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

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

1 голос
/ 21 августа 2008

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

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

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

0 голосов
/ 21 августа 2008

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

0 голосов
/ 19 августа 2008

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

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