Проблема или Почему Застрявшие Нити злые?
WebLogic Server автоматически определяет, когда поток в очереди выполнения «застревает». Поскольку застрявший поток не может завершить свою текущую работу или принять новую работу, сервер регистрирует сообщение каждый раз, когда диагностирует застрявший поток. Если все потоки в очереди выполнения зависают, сервер меняет свое состояние работоспособности на «предупреждение» или «критическое» в зависимости от очереди выполнения:
- Если все потоки в очереди по умолчанию застряли, сервер изменит свое состояние работоспособности на « критическое ». (Вы можете настроить приложение Node Manager на автоматическое отключение и перезапуск серверов в критическом состоянии. Дополнительные сведения см. В разделе « Возможности Node Manager » в разделе «Настройка и управление сервером WebLogic».)
- Если все потоки в weblogic.admin.HTTP, weblogic.admin.RMI или пользовательской очереди выполнения застряли, сервер изменит свое состояние работоспособности на « предупреждение ».
Что вы можете сделать, чтобы избежать полного сбоя приложения?
- Закройте приложение, если в приложении есть застрявшие темы. Приложение закрывается, переводя его в режим администратора. Все работающие менеджеры, принадлежащие приложению, закрываются и ведут себя, как описано выше.
- Отметьте экземпляр сервера как сбойный и закройте его, если на сервере застряли потоки. В кластере кластерные клиенты, которые подключены или пытаются подключиться, переключатся на другой элемент кластера.
Как определить проблему?
Инструменты, которые помогут вам с анализом дампов потоков:
Как обойти проблему?
Ниже приведены некоторые сообщения о том, как создать Work Manager.
- https://blogs.oracle.com/jamesbayer/entry/work_manager_leash_for_slow_js
- http://jdeveloperfaq.blogspot.com/2011/05/faq-34-using-weblogic-work-managers-to.html
Тест: Как создать Застрявшую Нить?
Как создать Застрявшую Нить, чтобы проверить ваши настройки в Интернете? Поместите точку останова в базовый метод или метод модели, который вызывается по вашему запросу. Если вы подождете в точке останова Stuck Max Thread Time, вы заметите, что трассировка Stuck Thread будет отображаться в журнале серверов:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
<16 =?? 2011 12:28:22 ?? EET><Error><WebLogicServer><BEA-000337><[STUCK] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "134" seconds working on the request "weblogic.servlet.internal.ServletRequestImpl@6e6f4718[ GET /---/---/----/---/days .xhtml HTTP /1 .1 Connection: keep-alive User-Agent: Mozilla /5 .0 (Windows NT 6.1; WOW64) AppleWebKit /535 .2 (KHTML, like Gecko) Chrome /15 .0.874.120 Safari /535 .2 Accept: text /html ,application /xhtml +xml,application /xml ;q=0.9,*/*;q=0.8 Accept-Encoding: gzip ,deflate,sdch Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 Cookie: JSESSIONID=DYG5TDTZSnKLTFw5CMMdLCD9sPsZS4Jqlmxj9wdGNyt1BnPcfNrR!-1520792836 ] ", which is more than the configured time (StuckThreadMaxTime) of " 60" seconds. Stack trace: --------------------------------------------(--------------------.java:83) javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:823) com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:285) com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185) com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129) javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848) org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:55) org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:43) org.primefaces.component.fieldset.FieldsetRenderer.encodeContent(FieldsetRenderer.java:95) org.primefaces.component.fieldset.FieldsetRenderer.encodeMarkup(FieldsetRenderer.java:76) org.primefaces.component.fieldset.FieldsetRenderer.encodeEnd(FieldsetRenderer.java:53) javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878) javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620) javax.faces.render.Renderer.encodeChildren(Renderer.java:168) javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848) org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:55) org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:43) org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:229) org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:152) |
Больше копать:
- Отличный пост от Фрэнка Мунца: « Застрявшие темы WebLogic: создание, понимание и взаимодействие с ними» . Обновлено для Weblogic 12c. Включает в себя пример приложения для создания Stuck Thread тоже.
- http://stackoverflow.com/questions/2709410/weblogic-stuck-thread-protection
ЦСИ:
- Кнопка Maxence отличная запись: http://m-button.blogspot.com/2008/07/using-wlst-to-perform-regular.html
- http://download.oracle.com/docs/cd/E13222_01/wls/docs81/perfor/WLSTuning.html#1125714
- http://download.oracle.com/docs/cd/E21764_01/web.1111/e13701/overload.htm
- http://java.sys-con.com/node/358060?page=0,0
Ссылка: Работа с темами Weblogic Stuck от нашего партнера JCG Спироса Доулгеридиса в блоге ADF и Weblogic How To .