2016-10-11 4 views
0

Я запускаю сервер Tomcat/Spring на своей локальной машине, и у меня запущена другая программа, которая быстро отправляет запросы POST на сервер один за другим. Каждый запрос вызывает обновление удаленной базы данных Postgresql и завершает (очищает код ответа) до отправки следующего.Сервер перегружен

После примерно 100 запросов сервер начинает принимать больше ответа. После примерно 200 запросов сервер перестает отвечать на запросы и принимает всю доступную обработку, пока я ее не убью вручную, либо в Eclipse, либо в диспетчере задач Windows.

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

Как я могу отслеживать и разрешать причину этой перегрузки сервера?

+1

У вас есть утечка памяти. –

+0

@ KarthikeyanVaithilingam - это было действительно полезно, указал мне в правильном направлении, спасибо. Я смотрю http://stackoverflow.com/questions/40119/how-to-find-a-java-memory-leak now ... –

+0

Используя профилирование JVM Explorer, я отследил проблему до созданных сеансов каждый запрос, но никогда не утилизируется. Недействив каждую сессию в конце связанного с ней запроса, проблема памяти исчезла. –

ответ

0

Вы контролировали использование памяти? Но вот несколько способов отследить проблему:

  1. Отслеживать использование своей памяти со временем в диспетчере задач.
  2. Попробуйте время от времени получать отвалы резьбы.
  3. Используйте visualVM для отслеживания использования процессора.
  4. Посмотрите, закрыты ли соединения DB.

    Возможно, это может быть много, но visualVM может быть вашим инструментом, чтобы начать диагностировать эти проблемы.

Смежные вопросы