Как диагностировать 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

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

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

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>
Другие вопросы по тегам