Как лучше всего профилировать пружинный контейнер, чтобы узнать, как оптимизировать его время запуска? - PullRequest
17 голосов
/ 24 ноября 2011

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

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

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

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

  • INFO DefaultListableBeanFactory: 555 - Предварительные экземпляры синглетонов - 2 секунды
  • INFO SessionFactoryImpl: 202 - создание фабрики сеансов - 2 секунды
  • INFO HibernateTransactionManager: 415 - Использование источника данных [com.mchange.v2.c3p0.ComboPooledDataSource ......] Hibernate SessionFactory для HibernateTransactionManager - 7 секунд

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

Ответы [ 4 ]

1 голос
/ 24 ноября 2011

Один из вариантов, который вы можете попробовать, - это использовать параметр default-lazy-init для ленивой инициализации bean-компонентов.Spring инициализирует все одноэлементные компоненты в процессе инициализации.Прочитайте ленивые экземпляры bean-компонентов справочного документа .

Убедитесь, что вы параметризовали значение, чтобы вы могли изменить его на true во время разработки и false во время производстваразвертывание.

Сканирование компонентов выполняется медленно. См. Этот пост о том, как отключить это при использовании Autowiring.

0 голосов
/ 13 августа 2013

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

Я добился большого успеха, разбив мою весеннюю конфигурацию на отдельные файлы и загружая только файлы, необходимые для определенного теста. Это работает особенно хорошо для меня, потому что я использую Camel , который дорог для запуска и не используется в большинстве моих тестов. Я использовал H2 , чтобы я мог запускать тесты своих служб DAOs + для базы данных без какого-либо сложного запуска / выключения (хотя для успешного соединения всех этих компонентов потребовалось некоторое время). Однако у меня все еще есть проблема с запуском всего приложения для интерактивного тестирования. Это тоже медленно для меня.

0 голосов
/ 24 ноября 2011

Вы также можете использовать Spring Insight.

0 голосов
/ 24 ноября 2011

20 секунд, чтобы запустить приложение.это не имеет значения.Важно то, сколько времени вам нужно для выполнения тестов!

  • Так что пишите свои тесты с помощью Mocks, которые вообще не требуют запуска.
  • Для большей интеграции, например, тестыпопробуйте разделить конфигурацию так, чтобы инициализировались только компоненты, необходимые для некоторой группы тестов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...