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?