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

голоса
12

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

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


Обновить:

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

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

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

Задан 16/08/2008 в 01:45
источник пользователем
На других языках...                            


8 ответов

голоса
15

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

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

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

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

Ответил 16/08/2008 в 03:12
источник пользователем

голоса
6

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

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

Ответил 16/08/2008 в 19:26
источник пользователем

голоса
2

JRockit Mission Control Задержка Analyzer.

Задержка Analyzer, который поставляется с JRockit показывает, что виртуальная машина «делает», когда он ничего не делает. В последней версии вы можете увидеть латентности для:

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

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

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

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

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

Ответил 29/09/2008 в 22:00
источник пользователем

голоса
2

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

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

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

Ответил 23/08/2008 в 09:22
источник пользователем

голоса
2

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

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

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

Ответил 16/08/2008 в 06:40
источник пользователем

голоса
1

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

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

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

Ответил 21/08/2008 в 13:49
источник пользователем

голоса
0

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

Ответил 21/08/2008 в 12:51
источник пользователем

голоса
0

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

Ответил 19/08/2008 в 19:50
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more