Como diagnosticar o Tomcat 6 de repente parar de responder?

2

Eu executo várias instâncias de tomcat e, ocasionalmente, algumas param de responder a solicitações - tempo limite em todas as conexões.

Estou usando o AJP com o mod_proxy no Apache 2.2.

Eu recebo um tempo limite via Apache / AJP através do conector AJP do Tomcat, mas também pelo conector HTTP direto no 8080.

Eu tenho /server-status configurado no Apache e ele mostra 16 solicitações atualmente sendo processadas com W , 4 solicitações ociosas e mais de 200 slots abertos sem conexão. Meu conector AJP está configurado como:

<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"/> 

, por isso deve ter muitos tópicos para aceitar novas conexões.

Usando top , vejo CPU e aguardo menos de 1% e o processo java tem 80% de memória. Há 60 milhões de mem grátis e 200 milhões de swap grátis.

Eu configurei uma página threads.jsp especial usando

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

que fornece informações úteis, mas neste estado - também não é carregado.

Em catalina.log eu vejo:

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

e atividades ocasionais de outras solicitações da web, mas não minhas.

Existe um caminho a partir da linha de comando, ou usando um profiler para obter uma lista de tópicos e rastreamentos de pilha para descobrir o que está ficando preso?

    
por Nic Cottrell 07.03.2014 / 13:03

2 respostas

2

Configure o Tomcat para ativar o RMI com estas opções:

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

(Este é um exemplo, não uma declaração de práticas recomendadas para segurança ...)

Use o jconsole que está no JDK e se conecta ao seu servidor.

    
por 07.03.2014 / 15:29
1

Se o Tomcat também não responder por meio do conector HTTP direto, o problema não estará no AJP, mas algo está errado no Tomcat.

Você pode obter um despejo de thread completo para ser gravado em catalina.out enviando um

kill -quit <tomcat PID>
    
por 14.08.2015 / 14:41