WebLogic защита от зависания потоков - PullRequest
21 голосов
/ 25 апреля 2010

По умолчанию WebLogic уничтожает застрявшие нити через 15 минут (600 с), это контролируется параметром StuckThreadMaxTime. Тем не менее, я не могу найти более подробную информацию о том, как именно определяется «застревание». В частности:

  • Какова точка, с которой начинается 15-минутный отсчет. Начало обработки запроса? Последний wait() -подобный метод? Что-то еще?
  • Это относится только к потокам обработки запросов или ко всем потокам? То есть может поток обработки запросов "избежать" этой защиты, порождая рабочий поток для длинной задачи? В частности, может ли он передать ответное письмо такому работнику без 15-минутного обратного отсчета?

Мой пример использования - загрузка огромных файлов через систему разрешений. Поскольку пользователь должен пройти аутентификацию и иметь права на просмотр файла, я не могу (или, по крайней мере, не знаю, как) оставить это на простом HTTP-сервере, например Apache. А поскольку файлы могут быть огромными, загрузка может (по крайней мере, теоретически) занять более 15 минут.

Ответы [ 2 ]

22 голосов
/ 26 апреля 2010

Weblogic НЕ убивает застрявшие темы после StuckThreadMaxTime. Это не может быть сделано, сообщение является только информацией о состоянии, так что вы (то есть администратор) знаете, что поток прошел 10 минут (600 секунд = 10 минут, а не 15)

Это настраиваемое значение.

Таймер запускается, когда поток начинает обрабатывать запрос на сервере. Поток не будет уничтожен, но фактически продолжит обработку до завершения операции. так что в вашем случае вам не нужно беспокоиться о потере потока, он только что проинформировал вас о затраченном времени, которое вы знаете в этом случае использования.

Это относится ко всем потокам AFAIK - любой порожденный поток также будет работать по тем же правилам.

ИМХО, Weblogic (или любой сервер приложений) не место для хранения и обслуживания больших файлов. Это идеально подходит для уровня веб-сервера - мы используем SunOne, на котором можно запустить сервлет загрузки файлов. В вашем случае вам потребуется Tomcat вместе с вашим Apache для оптимизации этого.

7 голосов
/ 22 января 2011

Документация WLS10 WorkManager может привести к серьезным царапинам. Смотрите http://blogs.oracle.com/jamesbayer/2010/01/work_manager_leash_for_slow_js.html для пошагового примера того, как определить WorkManager для веб-приложения в weblogic.xml и назначить определенный сервлет для его использования.

Добавляя к этому примеру, вы можете добавить <ignore-stuck-threads>true</ignore-stuck-threads> к определению <work-manager>, которое должно предотвращать подсчет потоков, работающих для этого WorkManager, в состоянии сбоя сервера.

...