Я хочу запустить свое приложение Java и для данной рабочей нагрузки быть в состоянии видеть:
Я знаю широко, где горлышко бутылки находится в моем приложении, но мне нужно намного более мелкомодульное представление для сужения его.
Спасибо
Редактирование jvisualvm похоже на инструмент - это определило проблему приблизительно за 30 секунд. Я просто должен знать то, что 'самовремя' означает в контексте профиля метода. Спасибо
Для подведения итогов используйте 64-разрядную память только в том случае, если
На каждом другом аспекте, начиная с сегодняшнего дня, 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. Позволяет присоединять и профилировать без специальной настройки.
Также ознакомьтесь с рекомендуемыми цепочками инструментов для 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>
Таким образом, можно увидеть общее время (в секундах), затраченное различными методами. В моем приложении большую часть времени тратит на ожидание данных от удаленного узла (не маловероятно, что через интернет-соединение).
В списке есть пара профилировщиков (eclipse one и JProfiler). Я просто НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ, чтобы профилировщик был одним из инструментов в вашем арсенале программирования.
Это то, что большинство программистов пропускает, но профилировщик может решать целые классы проблем, которые очень трудно решить другим способом.
Я просто говорю (всем, а не только задающему вопрос), что если вы не использовали профилировщик, найдите его, загрузите и запустите.
Между прочим, они намного мощнее статического вывода инструментов Java - хотя в этом конкретном случае может быть достаточно инструментов Java. Профилировщик может рассказать вам, что делает каждый поток, и может создать довольно интересную графику вызовов (стиль блок-схемы), которая поможет вам проанализировать код, который вы не писали.
Просто найдите один и используйте его в течение недели или двух, чтобы знать, что он предлагает.
Если вы готовы потратить немного денег,
JProfiler: http://www.ej-technologies.com/products/jprofiler/overview.html
очень хорош, он показывает % использованного времени, абсолютное время использования и количество вызовов вплоть до уровня метода. Он понимает вызовы EJB, вызовы веб-сервисов и даже показывает SQL вызовы jdbc. Я часто использую его для поиска проблем с производительностью.
В нем также есть профилирование памяти, но я нахожу профилирование процессора гораздо более полезным.
Взгляните на Eclipse TPTP . Они могут предоставить именно это и многое другое для любого приложения, запущенного из Eclipse.