Может ли Tomcat прервать выполнение потока обработки запросов и вызвать недоступность службы? - PullRequest
0 голосов
/ 04 октября 2011

В нашем журнале Tomcat и webapps есть загадочная ошибка. Веб-приложение Java работает на Tomcat 6, использует базу данных Oracle 11g. Все заявки зарегистрированы. Мы используем Commons DBCP для пула соединений с базой данных. Одной из особенностей нашего приложения является то, что все соединения ограничены запросами. Мы реализовали это с помощью SmartDataSource от Spring. Отпускание соединений заключено в try / finally, поэтому даже если во время запроса возникнет ошибка, соединение будет освобождено. Это работает хорошо все время, пока мы его тестировали.

Однажды наш сервер вернул ошибку 503 «Служба недоступна». В логах мы нашли только одно исключение: org.apache.commons.dbcp.AbandonedTrace$AbandonedObjectException. Таким образом, похоже, что Common DBCP отказался от сборщика соединений и обнаружил потерянное соединение и сообщил об этом. Это не ошибка сама по себе, это предположение, что ошибка в другом месте.

Трассировка сообщает нам точное время и код, когда было установлено соединение. Мы исследовали это время в журналах, и был запрос, который начался, но никогда не заканчивался. Это объясняет, почему соединение не было разорвано, но что нас беспокоит, так это то, как try / finally могло быть прервано?

Я думаю, что это проблема Tomcat, потому что в журналах наших приложений не было других исключений, и потому что код ошибки, который возвратил сервер, не был обычной ошибкой 500 «Внутренняя ошибка сервера».

У кого-нибудь есть предложения, почему это может произойти? Возможно, Tomcat прерывает поток, так что try / finally игнорируется?

...