Попробуйте JProfiler . Он имеет пробную лицензию и очень полнофункциональный. Чтобы использовать его, вам необходимо:
- Добавьте агента JProfiler в качестве аргумента в команду java
- Запустить программу на сервере
- Запустите JProfiler и выберите «Подключиться к приложению, работающему удаленно»
- Дайте ему номер порта и хост, на котором он работает
Все это содержится в инструкциях, прилагаемых к JProfiler, но важная часть заключается в том, что вы будете подключаться через хост и порт к запущенному приложению.
Что касается профилирования, я уверен, что у вас есть представление о том, что может потребовать значительных ресурсов памяти / ЦП - загрузка больших наборов данных, сортировка, даже простой сетевой ввод-вывод, если он сделан неправильно. Сделайте эти вещи (это здорово, если вы можете автоматизировать нагрузочное тестирование, используя несколько скриптов, которые работают на вашем сервере) и собрать снимок с помощью JProfiler.
Тогда просматривайте графики на досуге. Включите мониторинг ЦП и посмотрите, где расходуются циклы ЦП. Вы сможете сузить процентное соотношение при каждом вызове метода, поэтому, если вы используете более 1 или 2% ЦП в методах, для которых у вас есть источник, изучите и посмотрите, сможете ли вы сделать их менее ресурсоемкими.
То же самое касается памяти. Отключите все профилирование процессора, включите все профилирование памяти, снова запустите тесты и получите снимок.
Промыть, повторить.
Возможно, вам также понадобится время, чтобы ознакомиться с управлением памятью и сборкой мусора. Нет лучшего времени для настройки сборки мусора, чем когда вы уже профилируете: http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
Особое внимание уделите роли в продвижении объекта Эдем / Выживший. В веб-приложениях вы получаете много недолговечных объектов, поэтому часто имеет смысл увеличивать молодое поколение за счет постоянных поколений.