По умолчанию WebLogic убивает потоки после 15 минут (600 с), это контролируется параметром StuckThreadMaxTime
. Однако я не могу найти более подробную информацию о том, как именно определяется «застревание». В частности:Защита от заклинивания WebLogic
- В какой момент начинается отсчет 15 минут. Начало обработки запроса? Последний
wait()
-подобный метод? Что-то другое? - Это относится только к потокам обработки запросов или ко всем потокам? То есть может ли поток обработки запроса «избежать» этой защиты, создавая рабочий поток для выполнения длительной задачи? В частности, может ли он делегировать ответ на такого работника без 15-минутного обратного отсчета?
My usecase - это загрузка огромных файлов через систему разрешений. Поскольку пользователь должен быть аутентифицирован и иметь разрешения на просмотр файла, я не могу (или, по крайней мере, не знаю, как) оставить это на простом HTTP-сервере, например. Apache. И поскольку файлы могут быть огромными, загрузка могла (по крайней мере теоретически) занимать более 15 минут.
ОК, но поскольку я знаю, что он может перераспределить все приложение, если слишком много застрявших потоков, нет? Возможно, у меня были смешанные вещи с тайм-аутом сеанса - у нас были некоторые проблемы с этим в прошлом. О файлах - приложение настолько велико и багги, что нет времени тратить на оптимизацию, поскольку всегда есть более насущные проблемы. – doublep
Сервер перестает отвечать на новые запросы, если слишком много застрявших потоков, но в вашем случае они не «застревают», а обрабатывают длинные запросы. Лучший подход - предоставить FileDownloadServlet собственный пул потоков выполнения - на WL10 это будет выделенный WorkManager. Это гарантирует, что любые потоки, затронутые или затронутые при загрузке, не будут влиять на остальную часть обработки стандартных запросов сервера. см. здесь - http://download.oracle.com/docs/cd/E11035_01/wls100/config_wls/self_tuned.html#wp1059038. Вы можете определить политику отправки для этого сервлета. – JoseK
Благодарим вас за ответ и разъяснения. – doublep