Как лучше всего профилировать контейнер Spring, чтобы узнать, как оптимизировать время его запуска?

У меня есть приложение, которое становится довольно большим, и время запуска Spring составляет около 20 секунд. Для производственного использования это нормально, но для разработки это большая боль.

Какой хороший инструмент профилирования или подход может дать мне именно ту информацию, которая мне нужна, чтобы понять, что занимает так много времени? Может быть, это что-то, что я могу оптимизировать?

Мое приложение - это довольно типичное веб-приложение на Spring/hibernate. В нем около 50 таблиц базы данных и несколько сотен бобов (около 200-300... я не считал). Есть несколько @Configurable бобов. Много сканирования компонентов. Я также использую Spring Security.

Я сделал несколько профилирований primitize с помощью log4j - только на настройке INFO. Вот некоторые вещи, которые занимают немного времени:

  • INFO DefaultListableBeanFactory:555 - Pre-instantiating singletons - 2 секунды
  • INFO SessionFactoryImpl:202 - building session factory - 2 секунды
  • INFO HibernateTransactionManager:415 - Using DataSource [com. mchange.v2.c3p0.ComboPooledDataSource......] Hibernate SessionFactory для HibernateTransactionManager - 7 секунд

Есть несколько вещей, которые занимают от .5 до, может быть, 1 секунды максимум, но эти три были самыми большими.

17
задан egervari 24 November 2011 в 07:32
поделиться