Apache+Tomcat, имеющий передачу задач. Неясные сообщения об ошибках. Перевод в нерабочее состояние веб-сайтов размещается под Tomcat

Вы не упоминаете, какую платформу Вы используете, но в подобных Unix системах tail команда делает это:

tail -f /var/log/messages

На самом деле существуют реализации tail для Windows также (например, unxutils).

22
задан 10 June 2009 в 17:33
7 ответов

Оказывается, что эта версия (classes12 - довольно старый) драйвера Oracle имела различные ошибки в ней, которые вызвали мертвую блокировку (как замечено в состоянии TP-Processor2, заключенном в кавычки выше). Это не стало активным, пока мы не переключились на новую среду. Обновление до последней версии (ojdbc14) решило вопрос об основном сервере.

9
ответ дан 2 December 2019 в 20:00

Из описания я предположил бы, что проблема может произойти из-за занимания слишком много времени запросов базы данных. Если запросы займут больше времени, то запрос займет больше времени, и поэтому у Вас будет больше из них работающий сразу. Как Вы видите, у Вас заканчиваются потоки кота. При решении проблемы с базой данных, необходимо быть хорошо.

  • Получите отслеживание стека, или использующий jstack или использование уничтожают-3$process_id. Посмотрите то, что делают Ваши потоки, когда это умирает. Если они все ожидают на базе данных, это - хороший указатель на мою теорию. Они могли бы все ожидать на некоторой блокировке.
  • Установка LambdaProbe. Это неоценимо для обнаружения, что делает Ваш кот.
  • Обновите своего кота. 5.5.8 невероятно старо. Я думаю, что они находятся теперь на 5.5.27.
6
ответ дан 2 December 2019 в 20:00
  • 1
    David, I' ve обновил вопрос (см. Обновление 1) с новыми результатами на основе Вашего предложения дампа/отслеживания стека потока. –  Jordy Boom 6 June 2009 в 00:23
  • 2
    I' d предполагают, что Ваше объединение соединения с базой данных является слишком маленьким по сравнению с Вашим котом макс. значение соединения. Кажется, что большинство потоков ожидает для получения соединения с базой данных. –  David Pashley 6 June 2009 в 04:03
  • 3
    Единственная причина там состоит в том, что много потоков - то, потому что потоки, обычно используясь оставлены, ожидая того одного потока, пытающегося читать из сокета. Количество соединений с БД, используемых в любое время, идет между 1 и 3. There' s никогда потребность в больше, чем, что многие. –  Jordy Boom 8 June 2009 в 19:35

У меня были лучшие результаты с mod_proxy вместо mod_ajp с точки зрения устойчивости, так попробуйте то решение. Это является неразрушающим - в лучшем случае это решит проблему, и в худшем случае это исключит mod_ajp.

Другой, что это, кажется, что Ваши Коты прекращают отвечать, и все потоки запроса заняты. Сделайте, чтобы Ваша команда разработчиков изучила то, что продолжается - взятие дампа потока и поставка его им будут полезны.

2
ответ дан 2 December 2019 в 20:00
  • 1
    У меня создалось впечатление, что mod_proxy имеет некоторые проблемы масштабируемости несмотря на то, чтобы быть легче поднять трубку. Кажется, что основа Apache рекомендует mod_jk ( wiki.apache.org/tomcat/FAQ/Connectors#Q2 ) –  Ophidian 5 June 2009 в 02:16
  • 2
    Это не обеспечивает липкую сессию, верную. Но кроме этого I' ve никогда не имел проблемы с ним. –  Robert Munteanu 5 June 2009 в 12:22

Первая вещь, о которой я думаю, когда я слышу, что сервер работает некоторое время, внезапно замедляется и затем начинает иметь отказы услуги, состоит в том, что он исчерпывает RAM и перегружает подкачку. Я не ясен на том, могли ли отказы AJP, которые Вы видите, быть последовательными к тайм-аутам, но это не кажется абсолютно неблагоразумным; не смотрите очевидный способ, которым это соединилось бы с NIC, все же. В любом случае я рекомендую получить изображение того, что продолжает использование памяти, когда эти события появляются.

Если у Вас заканчивается RAM, Вы, возможно, должны выключить свой Apache MaxClients и увеличение Ваш ListenBacklog.

Между прочим, благодарит делать Ваш вопрос так хорошо организованным и завершенным.

1
ответ дан 2 December 2019 в 20:00
  • 1
    Когда я obvserve ' top' в то время как это происходит, использование памяти остается довольно последовательным. По крайней мере, нет никаких скачков. There' s только краткий момент высокого использования ЦП. –  Jordy Boom 5 June 2009 в 22:03

Из-за пути работает AJP, постоянные соединения между апачем (использующий или mod_proxy_ajp или mod_jk) могут только быть безопасно закрыты клиентом. В этом случае клиент является апачским рабочим, который открывается и затем держит соединение с котом для жизни для рабочего процесса.

Из-за этого поведения у Вас не может быть большего количества апачских рабочих, чем рабочие потоки кота. Выполнение так заставит дополнительным http рабочим не удаваться соединиться с котом (поскольку принять очередь полна), и отметит Ваш бэкенд как ВНИЗ!

4
ответ дан 2 December 2019 в 20:00

У меня были похожие ошибки журнала в среде Redhat с proxy_ajp и Tomcat. Решено обновлением пакета httpd:

yum update httpd

с:

  • httpd-devel-2.2.3-43.el5_5.3.x86_64
  • httpd-2.2.3-43.el5_5.3.x86_64

до:

  • httpd-2.2.3-45.el5_6.3.x86_64
  • httpd-devel-2.2.3-45.el5_6.3.x86_64

Затем перезапустили apache, а затем перезапустили Tomcat.

Это исправило для меня!

1
ответ дан 2 December 2019 в 20:00

Добавьте ConnectionTimeout и keepAliveTimeout к AJP-коннектору, находящемуся в /etc/tomcat7/server.xml.

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" 
           connectionTimeout="10000" keepAliveTimeout="10000" />

Информация о AJP-коннекторе находится по адресу https://tomcat.apache.org/tomcat-7.0-doc/config/ajp.html

  • connectionTimeout = Количество миллисекунд, в течение которых этот коннектор будет ждать, после принятия соединения, представления линии URI запроса. Значение по умолчанию для коннекторов протокола AJP -1 (т.е. бесконечное).

  • keepAliveTimeout = Количество миллисекунд, в течение которых этот коннектор будет ждать другого запроса AJP, прежде чем закрыть соединение. По умолчанию используется значение, установленное для атрибута connectionTimeout.

Если значения connectionTimeout и keepAliveTimeout не определены, то соединения AJP будут оставаться живыми бесконечно. Причина, вызывающая множество потоков, по умолчанию максимальное количество потоков - 200.

Я рекомендую установить psi-probe - продвинутый менеджер и монитор для Apache Tomcat, вилка из Lambda Probe. https://code.google.com/p/psi-probe/

5
ответ дан 2 December 2019 в 20:00

Теги

Похожие вопросы