Запись ответа Tomcat 6

#tomcat6

#tomcat6

Вопрос:

Я наблюдаю странное поведение моего сервера tomcat, кажется, что tomcat недостаточно быстро пишет ответ клиенту. Вот что я вижу:

При одновременном выполнении около 200 запросов на моем сервере tomcat в журналах приложений показано, что doGet() моего сервлета завершает обработку запроса примерно через 500 мс. Однако на стороне клиента среднее время отклика составляет около 30 секунд (что означает, что клиент начинает видеть ответ от tomcat через 30 секунд)!

Есть ли у кого-нибудь какие-либо идеи о том, почему существует такая длительная задержка между окончанием времени обработки моего сервлета и временем, когда клиент получает ответ?

Мой сервер размещен на виртуальной машине Rackspace.

Ответ №1:

Найден виновник. Я заметил, что хостинг-сервер использует аномально высокую загрузку процессора даже для нескольких запросов, поэтому я подключил JConsole к Tomcat и обнаружил, что весь мой рабочий поток имеет высокое количество блокировок… и постоянно находятся в состоянии блокировки. Глядя на трассировку стека, блокировка произошла во время создания экземпляра JAXBContext. Кроме того, приложение создает JAXBContext, который является относительно дорогостоящим, для каждого запроса.

Итак, в целом, проблема была вызвана созданием экземпляра JAXBContext для каждого потока. Решение заключалось в том, чтобы гарантировать, что JAXBContext создается один раз для каждого приложения.