Застрял в проблеме производительности Spring - PullRequest
0 голосов
/ 01 апреля 2012

Я немного застрял в проблеме. У меня есть приложение Spring + Hibernate, которое последние несколько дней ведет себя очень странно.

Обычно, даже в режиме отладки, он загружается примерно 15 секунд.

По состоянию на пару дней, без каких-либо значительных ошибок или проблем, он начал работать дважды, если не три раза медленнее.

Я подумал, что, возможно, проблема была в Tomcat, но даже когда я запустил серию написанных мной модульных тестов, они работали удивительно медленно (мы говорим 8+ сек на тесте + 20 сек для начальной загрузки контекста) , Я использую локальную базу данных PostgreSQL для тестов, которая обычно не так уж плоха (около одной секунды на тесте)

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

Я полностью застрял

Ответы [ 3 ]

2 голосов
/ 01 апреля 2012

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

Скорее всего, это вызвано не изменением кода, а изменением среды.Например:

  • Spring извлекает некоторые внешние ресурсы при начальной загрузке (схемы XML, DTD и т.
  • База данных фрагментирована или как-то медленно.Попробуйте очистить пылесосом

Исследование:

  • Захватите несколько следов стека во время начальной загрузки.Нет необходимости в полномасштабном профилировании, держу пари, что есть одна операция блокировки / ожидания, которая замедляет процесс
  • Включите все операторы регистрации, которые вы можете. Каждый .Исследуйте, какие части вашего приложения работают медленно.
1 голос
/ 01 апреля 2012

Я думаю, что ваша БД является основной причиной этого.

Возможно, у вас есть запрос, который занимает больше времени, чем раньше, из-за увеличения размера данных, изменений схемы и т. П.

Вот несколько советов:

  • Попробуйте проверить журналы запуска, чтобы увидеть, что кажется медленнее.
  • Можете ли вы попробовать запустить более старую версию приложения и посмотреть, быстрее ли это?
  • Вы видите, какие тесты теперь медленнее?
0 голосов
/ 01 апреля 2012

Возможно, профилирование поможет вам получить больше информации. Существует хороший инструмент, поставляемый с JDK, который называется jvisualvm (вы можете найти его в папке bin вашей установки jdk). Это в значительной степени говорит само за себя. Вы можете подключиться к вашему приложению и начать выборку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...