Профилирование Java - как я могу получить метод анализом метода моего приложения?

Я хочу запустить свое приложение Java и для данной рабочей нагрузки быть в состоянии видеть:

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

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

Спасибо

Редактирование jvisualvm похоже на инструмент - это определило проблему приблизительно за 30 секунд. Я просто должен знать то, что 'самовремя' означает в контексте профиля метода. Спасибо

29
задан MalcomTucker 15 February 2010 в 17:47
поделиться

5 ответов

Для подведения итогов используйте 64-разрядную память только в том случае, если

  1. Вам нужна дополнительная память.
  2. Вы программируете, например, научные приложения, и вам нужна повышенная математическая точность

На каждом другом аспекте, начиная с сегодняшнего дня, 64-разрядный компилятор в .NET является шагом вниз.

Оптимизация производительности компиляторов .NET является серьезной проблемой.

-121--3052709-

Используется ли кэш сеансов SSL, предоставляемый nginx? Это может помочь nginx экономить на циклах, постоянно перерабатывая шифрование. См. http://wiki.nginx.org/NginxHttpSslModule#ssl_session_cache

Какой мониторинг используется для определения загрузки процессора? SSL, как правило, очень интенсивно использует ЦП.

Я бы сохранил прокси SSL в качестве назначенного уровня, путь, вы можете масштабировать стоимость переговоров ssl отдельно от других проблем.

-121--4501793-

Простейший подход для программы, работающей на java 6 от Sun, заключается в использовании программы jvisualvm в jdk. Позволяет присоединять и профилировать без специальной настройки.

21
ответ дан 28 November 2019 в 01:39
поделиться

Также ознакомьтесь с рекомендуемыми цепочками инструментов для DocBook.

-121--2426520-

Посмотрите на Eclipse TPTP . Они могут предоставить именно это и многое другое для любого приложения, начатого с Eclipse.

-121--1418297-

Самый простой способ - использовать -prof, например: java -prof -jar yurejar.jar

После завершения работы программы будет распечатан файл java.prof.

См. страницу документации HPROF

В моем приложении я использую: -Xrunhprof: cpu = samples, thread = y, doe = y

Этот отчет содержит, помимо прочего, следующее:

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>

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

14
ответ дан 28 November 2019 в 01:39
поделиться

В списке есть пара профилировщиков (eclipse one и JProfiler). Я просто НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ, чтобы профилировщик был одним из инструментов в вашем арсенале программирования.

Это то, что большинство программистов пропускает, но профилировщик может решать целые классы проблем, которые очень трудно решить другим способом.

Я просто говорю (всем, а не только задающему вопрос), что если вы не использовали профилировщик, найдите его, загрузите и запустите.

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

Просто найдите один и используйте его в течение недели или двух, чтобы знать, что он предлагает.

4
ответ дан 28 November 2019 в 01:39
поделиться

Если вы готовы потратить немного денег,

JProfiler: http://www.ej-technologies.com/products/jprofiler/overview.html

очень хорош, он показывает % использованного времени, абсолютное время использования и количество вызовов вплоть до уровня метода. Он понимает вызовы EJB, вызовы веб-сервисов и даже показывает SQL вызовы jdbc. Я часто использую его для поиска проблем с производительностью.

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

2
ответ дан 28 November 2019 в 01:39
поделиться

Взгляните на Eclipse TPTP . Они могут предоставить именно это и многое другое для любого приложения, запущенного из Eclipse.

2
ответ дан 28 November 2019 в 01:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: