Бесконечный цикл в сервлете - возможно ли восстановление? - PullRequest
5 голосов
/ 17 февраля 2009

Сегодня я исправил ошибку в приложении, которая могла приводить к бесконечному циклу в цикле запроса / ответа сервлета.

Так что просто из любопытства: что произойдет, если мой сервлет действительно попадет в цикл for (;;)?

Возможно ли как-то восстановить? Будет ли кот обнаруживать это? Может ли этот экземпляр быть убит без перезапуска сервера?

Или это одна из худших вещей, которые могут случиться, и очень быстрый способ убить веб-контейнер?

РЕДАКТИРОВАТЬ: Это был действительно бесконечный цикл, потребляющий процессор все время, но не память. Я продолжал работать в течение нескольких минут. Я думаю, я могу подтвердить, что tomcat не обнаружит такого рода вещи: -)

Ответы [ 5 ]

1 голос
/ 17 февраля 2009

Я полагаю, что вы могли бы справиться с этим с помощью соответствующей настройки тайм-аута:

http://tomcat.apache.org/connectors-doc/generic_howto/timeouts.html

1 голос
/ 17 февраля 2009

Я не думаю, что Tomcat обнаружит бесконечный цикл. Возможно, вы сможете остановить сервлет с помощью диспетчера Tomcat, если сервлет не использует все время ЦП с его циклом. В противном случае, возможно, самый безопасный и простой способ - просто перезапустить сервер.

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

1 голос
/ 17 февраля 2009

, если бесконечный цикл вызван бесконечным перенаправлением, он рано или поздно завершит этот запрос с помощью StackOverflowException.

это «истинный» бесконечный цикл, вы можете постоянно перегружать один процессор / ядро ​​и в конечном итоге вывести из строя все приложение с OutOfMemoryException.

tomcat, насколько я знаю, не имеет явного обнаружения этих проблем.

1 голос
/ 17 февраля 2009

Не уверен, что Tomcat имеет такое обнаружение, но, например, веб-контейнер Websphere делает. Однако, очевидно, что контейнеру требуется относительно много времени для обнаружения «зависшего» потока. Сервер под нагрузкой может быть легко и быстро уничтожен таким кодом.

0 голосов
/ 17 февраля 2009

WebLogic может обнаруживать застрявшие потоки: http://edocs.bea.com/wls/docs81/perform/WLSTuning.html#1125714

Хотя в Tomcat такого еще не видели.

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