Обычно, когда кто-то платит за повышение производительности системы, он почти точно знает, чем он / она недоволен. Поэтому сначала составьте список проблем. Тот факт, что система «медленная», не является проблемой, потому что «медленная» всегда связана с чем-то «быстрым» (например, система не успевает за входящим трафиком).
Как только у вас есть список, примерно идентифицируйте компоненты как «медленные».
Затем поработайте с журналированием (убедитесь, что каждое сообщение имеет префикс с отметкой времени в миллисекундах, переконфигурируйте регистратор, если необходимо).
Проверьте, что регистрируется для «медленной» работы, сколько времени система тратит на каждый компонент.
Как только вы приблизительно определили медленный компонент, увеличьте детализацию ведения журнала для этого конкретного компонента и попытайтесь выяснить, что с ним не так (медленная БД, плохой код и т. Д.)
Если вам просто нужно сделать систему быстрее, вы можете найти первое место для оптимизации, многократно запуская jstack в процессе, работающем при максимальной нагрузке (некоторые называют этот метод «профилированием Монте-Карло»). Сравнивая последующие дампы стека, вы можете определить, где приложение статистически проводит большую часть своего времени, и улучшить соответствующий блок.
Также полезно подключиться с помощью jconsole к работающему проекту и отслеживать потребление памяти, просматривая файлы журналов, чтобы выяснить, кто выделяет больше всего памяти.