Pergunta

Eu tenho um aplicativo da web que está funcionando muito lenta e ocasionalmente. É um aplicativo de wicket relacionado à escola com relatórios e edições, e também um servlet usado por clientes automatizados para obter/postar dados via HTTPS.

Durante os horários de pico em que muita edição/upload/download está acontecendo, o aplicativo se torna lento e que não responde. Recebo erros de "Pagemap ainda bloqueados". Tomcat parece continuar rindo. O uso da memória é gerenciável, cerca de 50m.

Eu configurei seu kit para obter algumas informações sobre perfil e, durante um período movimentado, descobriu que 81% do tempo da CPU do tomcat é gasto aqui:

org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run()
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(Object[])
org.apache.jk.common.ChannelSocket.processConnection(MsgContext)
org.apache.jk.common.ChannelSocket.receive(Msg, MsgContext)
org.apache.jk.common.ChannelSocket.read(MsgContext, byte[], int, int)
java.io.BufferedInputStream.read(byte[], int, int)
java.io.BufferedInputStream.read1(byte[], int, int)
java.io.BufferedInputStream.fill()
java.net.SocketInputStream.read(byte[], int, int)
[Wall Time]  java.net.SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int)

Neste aplicativo, tenho cerca de 250 clientes pesquisando o servidor sobre o SSL solicitando atualizações a cada 30 segundos. Na maioria das vezes, isso retorna rapidamente uma resposta vazia. Ocasionalmente, há uma enxurrada de atividade de banco de dados e uma série de dados (alguns MB) pode ser enviada de volta ao cliente.

Então, de que é essa atividade de 81%? Alguns clientes com conexões muito lentas poderiam atravessar os threads do Tomcat, fazendo com que ele aguarde os órgãos de solicitação de entrada?

Alguém viu algo assim ou tem algum conselho sobre como testar/solucionar/corrigir isso?

Foi útil?

Solução

Você deve configurar um ambiente de teste e tentar reproduzir isso com um teste de carga.
Dessa forma, você pode isolar a causa. Caso contrário, existem muitos fatores.
Além disso, você pode tentar consertar sem prejudicar seu imbecil Env.

Outras dicas

O uso da memória é provavelmente a causa.
Você deve verificar o uso da memória para o processo Java para ver quanto está recebendo.
Se não estiver recebendo o suficiente, você precisará definir o parâmetro XMX JVM onde quer que estes estejam definidos para o TomCat.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top