У меня есть приложение, работающее на Apache Tomcat 5.5 на виртуальной машине Win2k3. Приложение обслуживает XML для использования некоторыми телефонными устройствами в рамках нашей инфраструктуры IVR. Приложение, в свою очередь, получает информацию от нескольких сервисов SOAP.
Этим утром службы SOAP периодически прерывались, вызывая всевозможные исключения. Как только они прекратились, я заметил, что наше приложение все еще работает очень медленно, так как рендеринг и доставка страниц занимают много времени. Эта медлительность была замечена как на устройствах, которые используют выходные данные Tomcat, так и на простом тесте запроса некоторых статических документов из моего веб-браузера.
Перезапуск Tomcat немедленно решил проблему.
Взломав журнал localhost, я вижу кучу этих ошибок, вплоть до перезапуска Tomcat:
WARNING: Exception thrown whilst processing POSTed parameters
java.net.SocketException: Software caused connection abort: recv failed
После большого количества поисков в Google моя рабочая теория заключается в том, что проблема с SOAP приводила к тому, что мои пользователи получали ошибки, в результате чего они делали больше запросов, что увеличивало нагрузку на приложение. Это вызвало исчерпание доступных сокетов для обработки входящих запросов.
Итак, вот мое затруднение:
1. Это правильная гипотеза, или я просто по уши с HTTP и Tomcat?
2. Если это правильная гипотеза, есть ли способ увеличить размер «очереди сокетов», чтобы в будущем этого не произошло?
Спасибо!
IVR Avenger