Ответ 1
Самый простой подход для программы, запущенной в java 6 от Sun, - использовать программу jvisualvm в jdk. Позволяет прикрепить и профиль без какой-либо специальной настройки.
Я хочу запустить свое приложение Java и получить заданную рабочую нагрузку:
Я знаю широко, где шея бутылки находится в моем приложении, но мне нужно гораздо более мелкозернистый вид, чтобы сузить его.
Спасибо
Изменить jvisualvm выглядит как инструмент - он идентифицировал проблему примерно через 30 секунд. Мне просто нужно знать, что означает "самолюбие" в контексте профиля метода. Благодаря
Самый простой подход для программы, запущенной в java 6 от Sun, - использовать программу jvisualvm в jdk. Позволяет прикрепить и профиль без какой-либо специальной настройки.
Самый простой способ - использовать -prof, например: java -prof -jar yourjar.jar
Это будет печатать файл с именем java.prof после завершения работы программы.
См. страница документации HPROF
В моем приложении я использую: -Xrunhprof: CPU = образцы, поток = у, МЭ = у
Это печатает отчет, содержащий, среди прочего, следующее:
CPU SAMPLES BEGIN (total = 55110) Sun Feb 7 17:02:51 2010
rank self accum count trace method
1 69.68% 69.68% 38399 300361 java.net.SocketInputStream.socketRead0
2 24.40% 94.08% 13448 300386 java.net.SocketInputStream.socketRead0
3 0.20% 94.28% 108 300425 java.io.FileOutputStream.writeBytes
4 0.19% 94.47% 107 300976 java.net.PlainDatagramSocketImpl.receive0
5 0.19% 94.65% 102 300414 package.BlockingSampleBuffer.addSample
6 0.16% 94.82% 90 300365 java.net.SocketOutputStream.socketWrite0
7 0.16% 94.98% 89 300412 package.BlockingSampleBuffer.addSample
8 0.15% 95.13% 84 300430 java.lang.Object.wait
9 0.14% 95.27% 77 300592 java.io.FileOutputStream.writeBytes
10 0.14% 95.41% 76 300566 java.lang.AbstractStringBuilder.<init>
Итак, вы можете увидеть общее время (в секундах), потраченное различными способами. В моем приложении большую часть времени тратит время ожидания данных с удаленного хоста (что маловероятно через подключение к Интернету).
В списке есть пара профилировщиков (Eclipse one и JProfiler). Я просто хочу ВЫСОКО РЕКОМЕНДУТЬ, что профилировщик является одним из инструментов в вашем программном инструменте.
Это то, что проходит большинство программистов, но профилировщик может решить целые классы проблем, которые очень трудно решить иначе.
Я просто говорю (каждому, а не только допрашивающему), что если вы не использовали профайлер, найдите его, загрузите и запустите.
Кстати, они намного мощнее статического вывода java-инструментов, хотя в этом конкретном случае инструментов java может быть достаточно. Профилировщик может рассказать вам, что делает каждый поток, и может сделать довольно крутую графику вызовов (стиль блок-схемы), которая поможет вам проанализировать код, который вы не писали.
Просто найдите его и используйте его в течение недели или двух, чтобы вы знали, что он предлагает.
Java 1.7 * поставляется в комплекте с Java Mission Control (jmc), который имеет функцию "Flight Recorder", которая может использоваться для профилирования выполнения метода. Результаты профилирования отображаются почти так же, как AppDynamics - легко определить первичную проблему (например, какие методы потребляют весь процессор).
Хотя не подробное, но хорошее сообщение в блоге, объясняющее о Flight Recorder: http://hirt.se/blog/?p=364
* Не уверен относительно младшей версии
Взгляните на Eclipse TPTP. Они могут предоставить именно это и многое другое для любого приложения, запущенного с Eclipse.
Если вы готовы потратить немного денег,
JProfiler: http://www.ej-technologies.com/products/jprofiler/overview.html
очень хорош, он показывает вам% используемого времени, используемое абсолютное время и количество вызовов до уровня метода. Он понимает вызовы EJB, вызовы веб-сервисов и даже отображает SQL-запросы jdbc. Я часто использую его, чтобы найти проблемы с производительностью.
У него также есть профилирование памяти, но я считаю, что профилирование процессора намного полезнее.
Именно здесь помогает АОП. Аспекты могут быть добавлены/удалены без изменения кода. Если вы используете Spring; создайте Aspect, включая JoinPoint, Совет, перечисляющий классы и общедоступные методы, которые должны оценивать время выполнения. Добавьте эти beans в конфигурацию Spring. Другое использование AspectJ Container для приложения spring