Я запускаю несколько экземпляров 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>