Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
898
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
951
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
941
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1725
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4398
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Если у вас есть приложение Java, которое потребляет CPU, когда оно ничего не делает, как вы определяете, что оно делает?
Я вызываю поставщика Java API, и на некоторых серверах кажется, что JVM переходит в цикл опроса с низким приоритетом после входа в API (CPU при использовании 100%). То же самое приложение на других серверах не проявляет такого поведения. Это происходит на WebSphere и Tomcat. Окружение сложно настроить, поэтому трудно попытаться сделать что-то вроде профилирования в Eclipse.
Есть ли способ профилировать (или какой-то другой метод проверки) существующее приложение Java, работающее в Tomcat, чтобы узнать, какие методы выполняются, пока оно находится в этом состоянии spinwait? Приложение выполняет только один метод, когда оно попадает в это состояние (метод поставщика). Поставщик не может повторить поведение (конечно).
Обновление:
Используя JConsole, я смог определить, кто бежит и что они делают. Мне потребовалось несколько часов, чтобы понять, почему он это делает. Проблема заключалась в том, что используемый поставщик API jar не соответствовал точно конфигурации базы данных, которую он использовал. Он по умолчанию включал отслеживание и мониторинг производительности на серверах, которые имели небольшое несоответствие в конфигурации. Я использовал другой jar и все хорошо.
Так что спасибо, Джошуа, за твой ответ. JConsole было чрезвычайно легко настроить и использовать для мониторинга существующего приложения.
@Cringe-я немного поэкспериментировал с некоторыми из предложенных вами вариантов. У меня были некоторые проблемы с настройкой JProfiler, это выглядит хорошо (но дорого). В дальнейшем я пошел дальше и добавил плагин Eclipse Profiler, и я буду просматривать различные профилировщики с открытым исходным кодом для сравнения функциональности.
Если вы используете Java 5 или более позднюю версию, вы можете подключиться к своему приложению с помощью jconsole для просмотра всех запущенных потоков. jstack также будет делать дамп стека. Я думаю, что это должно все еще работать даже внутри контейнера, такого как Tomcat.
Оба этих инструмента включены в JDK5 и позже (я предполагаю, что процесс должен быть по крайней мере Java 5, хотя я могу ошибаться)
Обновление: Также стоит отметить, что начиная с JDK 1.6 update 7 теперь есть встроенный профилировщик под названием VisualVM , который может быть запущен с 'jvisualvm'. Похоже, что это проект java.net, поэтому дополнительная информация может быть доступна на этой странице. Я еще не использовал его, но он выглядит полезным для более серьезного анализа.
Надеюсь, это поможет
Столкнувшись с той же проблемой, я использовал YourKit profiler . Это загрузчик не активируется, если вы на самом деле не подключитесь к нему (хотя он и открывает порт для прослушивания соединений). Сам профилировщик имеет приятный "get amount of time spent in each method" при работе в менее навязчивом режиме.
Другой способ-определить нагрузку CPU (через JNI, так что для этого вам понадобится внешняя библиотека) в потоке "watchdog" с самым высоким приоритетом и начать регистрировать все потоки, когда CPU будет достаточно высоким в течение достаточно долгого времени. Вы можете найти эту статью поучительной.
Если это для профессиональных целей, и у вас есть немного денег, чтобы потратить, попробуйте получить в свои руки JProfiler . Если вы просто хотите получить некоторые идеи, попробуйте плагин Eclipse Profiler. Я использовал его несколько раз, но я не знаю его текущего состояния.
Новый(?) проект из самого проекта eclipse также доступен: http://www.eclipse.org/tptp/ (см. Эту статью). Никогда не пользовался им, так что я не могу сказать, стоит ли это усилий.
Есть также очень хороший список профилировщиков с открытым исходным кодом, доступных по адресу http://www.manageability.org/blog/stuff/open-source-profilers-for-java
JRockit Анализатор Задержки Управления Полетом.
Анализатор задержки, который поставляется с JRockit, показывает вам, что такое JVM "doing", когда он ничего не делает. В последней версии вы можете увидеть задержки для:
- Java wait/blocked/sleep/parked.
- Файловый Ввод-Вывод
- Сетевой Ввод / Вывод
- Выделение памяти
- GC паузы
- JVM задержки, например, генерация кода и загрузка класса
- Резьбовая подвеска
Инструмент выдаст вам стек trace, когда произойдет задержка. Вы можете просматривать данные о задержке различными способами (агрегированные трассировки, гистограммы, графики потоков и т. д.).). Инструмент также позволяет видеть переходы между потоками,например, когда один поток уведомляет другой.
Накладные расходы незначительны и в отличие от многих других инструментов могут быть использованы в производственной среде. Этот пост в блоге дает вам краткое введение, и программу можно скачать здесь .
Это бесплатно использовать для развития!
Используйте профилировщик. Да, они стоят денег, и иногда их использование может быть немного неудобным, но они дают вам гораздо больше реальных доказательств, чем догадок.
Человеческие существа обычно плохо угадывают, где находятся узкие места производительности. Это просто кажется чем-то, что наш мозг не очень хорошо умеет делать. Это может показаться очевидным, у вас могут быть отличные идеи о том, в чем заключается проблема, но реальный мир часто оказывается занят чем-то другим. А оптимизация неправильной части кода означает, в лучшем случае, много работы с минимальной пользой. Чаще всего он замедляет ход событий, а иногда и вовсе ломает их. Поэтому, прежде чем вносить какие-либо изменения ради оптимизации, вы всегда должны иметь реальные доказательства от профайлера или другого точного инструмента.
Как уже упоминалось, и JProfiler, и YourKit являются довольно хорошими и не слишком дорогими. В прошлый раз, когда я смотрел, у них обоих тоже были бесплатные демо-версии.
Для полноты картины: хотя моя компания более или менее стандартизирована на Eclipse, мы используем Netbeans (6 и выше) с включенным бесплатным профилировщиком ежедневно. Он работает лучше, чем плагин Eclipse TPTP (последний раз проверялся 3 месяца назад), и для нас он устраняет любую потребность в коммерческом профайлере, таком как JProfiler, что отлично, но быстро становится ненужным.