WAS for z/OS: Servant HTTP request timeout & stalled threads

В этой статье мы рассмотрим как диагностировать событие HTTP-таймаута, что означает приведенная в ошибке дополнительная информация, как узнать что выполнялось в потоке когда произошел таймаут, какие виды таймаутов бывают в WAS, а так же затронем тему зависших потоков.

При превышении установленного по умолчанию значения HTTP-таймаута, сервант (Servant Region, SR) сервера приложений завершается, при этом возникает ошибка “BBOO0327I HTTP REQUEST TIMEOUT”.

Живой пример ошибки:

Общий формат ошибки выглядит так:

BBOO0327I: {0} REQUEST TIMEOUT: ({1}):({2}):({3}):({4}):({5}):({6}):({7}):({8}):({9}):({10}):({11}):():():({12})

Подробная информация начинается  с указания типа запроса {0}. Далее, после слов “REQUEST TIMEOUT”, по порядку: (servant hexadecimal ASID): (request id): (internal information): (servant tcb address): (servant job id or job name): (time request received in controller): (time request queued to wlm): (time request dispatched in servant): (class name): (method name): (string indicating the origin of the request): (future data): (future data): (request type specific information)

Для IIOP-запросов, последнее поле не используется. Для HTTP-запросов, последнее поле это целевой URI. Для MDB-запросов это имя листнер порта (listener port name) исходного сообщения. Если запрос не был направлен в сервант, тогда TCB серванта и его ASID имеют нулевые значения, и поле, где указывается время отправления запроса в сервант, является пустым.

Если к указанному в ошибке времени прибавить 5 минут (таймаут по умолчанию), получим реальное время, когда произошел таймаут. То есть сервер приложений сообщает нам, что у запроса, поступившего во столько, случился таймаут.

Есть возможность узнать какой код выполнялся в момент, когда случился тайм-аут. Для этого необходимо установить переменную server_region_http_stalled_thread_dump_action=TRACEBACK.

Для установки этой переменной в административной консоли WAS выберите раздел “Environment” -> “WebSphere variables”, выберите нужный scope, нажмите “New”, введите имя и значение переменной. После сохранения и синхронзации изменений с узлами требуется перезапустить сервер приложений.

После этого в SYSPRINT серванта будет выводиться стек-трейс потока:

Сервер приложений использует внутренний счетчик для подсчета количества зависших нитей (stalled threads/hung threads). Если нить успевает завершить обработку запроса до того, как SR будет перезапущен, то счетчик уменьшается на единицу. Используя параметр server_region_stalled_thread_threshold_percent, можно увеличить число допустимых зависших нитей, тем самым увеличив время, отводимое на завершение обработки запросов для зависших нитей. Контрол регион (Control Region, CR) будет перезапускать SR только в случае достижения определенного количества зависших нитей, но пока это число будет достигнуто некоторые ранее зависшие потоки могут завершиться, т.е. могут успеть обработать запрос.

Имя переменной server_region_stalled_thread_threshold_percent
Описание Определяет процент от общего числа нитей в серванте, которые должны быть недоступны прежде чем CR завершит работу SR
Тип integer (0-100)
Scope cell/node/server/cluster
Значение по умолчанию 0 (CR завершит работу SR как только появится хотя бы одна зависшая нить)

Установка этого параметра аналогична созданию переменной server_region_http_stalled_thread_dump_action.

Событие таймаута обусловлено работой различных таймеров, которые существуют в WAS. То есть таймаут соответствует типу таймера. Ниже приведена сводная таблица таймеров по типам.

Тип таймера Работа таймера Симптомы таймаута
Input Входящие таймеры (Input timers) определяют время, отведенное  для  получения всего запроса. Отсчет начинается после того, как устанавливается соединение с JEE-сервером (состояние established). Протоколы взаимодействия (HTTP, HTTPS) определяют используемые для запроса таймеры. Сессия закрыта.
Session Таймеры сессии (Session timers) определяют лимит времени, отведенный для  использования  сессионных соединений. Отсчет начинается как только сессия становится неактивной. Сессия закрыта.
WLM dispatch Таймеры направления или отправки (Dispatch timers) определяют как долго запрос клиента ожидает направления в сервант для обработки. Для некоторых таймеров дополнительное значение, представленное процентом времени доставки запросов в SR, может определять таймаут для очереди WLM. По истечении этого времени запрос удаляется из очереди WLM, но SR не завершается. Отсчет таймера начинается когда контроллер помещает запрос в очередь WLM. В зависимости от конкретного таймера, лимит времени может включать как время ожидания в очереди WLM, так и время, необходимое для обработки запроса. Возникает сообщение BBOO0327I для всех таймаутов. В SR появляется сообщение BBOO0232W и он завершается с кодом EC3 ABEND  и одним из следующих reason codes:

  • 04130003
  • 04130004
  • 04130006
Transaction Таймеры транзакции (Transaction timers) определяют как долго:

  • Приложение или контроллер (CR) ожидают завершения одной транзакции. Отсчет начинается когда контейнер начинает транзакцию приложения.
  • Контроллер пытается восстановить транзакции других серверов или находится в режиме восстановления.
Возникает сообщение BBOT0003W или BBOO0232W. SR завершается с кодом EC3 ABEND и одним из следующих reason codes:

  • 04130002
  • 04130005
Output Выходящие таймеры (Output timers) определяют как долго контроллер (CR) ожидает получить результат на запрос клиента. Отсчет начинается когда запрос клиента будет направлен в сервант для обработки. Протоколы взаимодействия (HTTP, HTTPS) определяют используемые для запроса таймеры. В SR появляется сообщение BBOO0232W, он завершается с кодом EC3 ABEND и кодом причины 04130007.

Ссылка на оригинальную таблицу: http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-nd-zos&topic=rtrb_understandingtimers

Дополнительную информацию о таймауте отправки (Dispatch Timeout) можно получить здесь.

VN:F [1.9.22_1171]
Rating: 5.0/5 (3 votes cast)
Метки: , , ,
Опубликовано в WebSphere Application Server, Обнаружение и устранение проблем
2 комментария на “WAS for z/OS: Servant HTTP request timeout & stalled threads
  1. Самолысов Павел:

    Коллеги, не могли бы вы дать ссылку на источник этой замечательной сводной таблицы?

    VA:F [1.9.22_1171]
    Rating: +1 (from 1 vote)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Выбор языка: