Назад | Перейти на главную страницу

Как диагностировать Tomcat 6, внезапно перестающий отвечать на запросы?

Я запускаю несколько экземпляров tomcat, и иногда некоторые просто перестают отвечать на запросы - таймаут для каждого соединения.

Я использую AJP с mod_proxy в Apache 2.2.

Я получаю тайм-аут через Apache / AJP через коннектор Tomcat AJP, а также через прямой коннектор HTTP на 8080.

у меня есть /server-status настроен в Apache и показывает 16 запросов, которые в настоящее время обрабатываются с W, 4 незанятых запроса и 200+ открытых слотов без подключения. Мой коннектор AJP настроен как:

<Connector port="8009" address="localhost"
           maxThreads="250" minSpareThreads="5" maxSpareThreads="15"
           connectionTimeout="1000"
           packetSize="16384"
           maxHttpHeaderSize="16384"
           enableLookups="false" redirectPort="8443"
           emptySessionPath="true" URIEncoding="UTF-8" protocol="AJP/1.3"/> 

поэтому у него должно быть много потоков для приема новых подключений.

С помощью top Я вижу процессор и жду как ниже 1%, так и у java-процесса 80% памяти. Существует 60 МБ свободной памяти и 200 МБ свободной памяти.

Я создал специальный threads.jsp страница с использованием

SystemThreadList stl = new SystemThreadList();
Thread[] allThreads = stl.getAllThreads();

который дает полезную информацию, но в этом состоянии - тоже не загружается.

В catalina.log я вижу:

Mar 07, 2014 11:53:09 AM org.apache.jk.common.ChannelSocket processConnection
WARNING: processCallbacks status 2

и случайная активность из других веб-запросов, но не из моих.

Есть ли способ из командной строки или с помощью профилировщика получить список потоков и трассировки стека, чтобы узнать, что застревает?

Настройте Tomcat для включения RMI со следующими параметрами:

-Dcom.sun.management.jmxremote.port=12346 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Djava.rmi.server.hostname=myhost

(Это пример, а не инструкция по обеспечению безопасности ...)

Используйте jconsole, которая находится в JDK, и подключитесь к вашему серверу.

Если Tomcat также не отвечает через прямой HTTP-коннектор, значит, проблема не в AJP, а в Tomcat что-то не так.

Вы можете получить полный дамп потока для записи на catalina.out, отправив

kill -quit <tomcat PID>