Question

J'ai une application Web qui tourne très lentement et qui pend parfois. Il s’agit d’une application Wicket pour les écoles avec création de rapports et édition, ainsi que d’une servlet utilisée par les clients automatisés pour obtenir / publier des données via HTTPS.

Pendant les périodes de pointe où beaucoup de modifications / téléchargement sont en cours, l'application devient lente et ne répond plus. Je reçois Wicket " PageMap toujours bloqué " les erreurs. Tomcat semble continuer à avancer. L’utilisation de la mémoire est gérable, environ 50 Mo.

J'ai configuré YourKit pour obtenir des informations de profilage et, au cours d'une période occupée, j'ai constaté que 81% du temps CPU de Tomcat est dépensé ici:

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)

Dans cette application, environ 250 clients interrogent le serveur via SSL et lui demandent des mises à jour toutes les 30 secondes. La plupart du temps, cela renvoie rapidement une réponse vide. À l'occasion, l'activité de la base de données est très dense et toute une série de données (quelques Mo) peut être renvoyée au client.

Alors, quelle est cette activité de 81%? Quelques clients disposant de connexions très lentes pourraient-ils ralentir les threads tomcat en l’attendant pour le corps des requêtes entrantes?

Quelqu'un a vu quelque chose de semblable ou des conseils sur la façon de tester / résoudre / résoudre ce problème?

Était-ce utile?

La solution

Vous devez configurer un environnement de test et essayer de le reproduire avec un test de charge.
De cette façon, vous pouvez isoler la cause. Sinon, il y a trop de facteurs.
De même, vous pouvez essayer des correctifs sans compromettre votre environnement de production.

Autres conseils

L’utilisation de la mémoire en est probablement la cause.
Vous devriez vérifier l'utilisation de la mémoire pour le processus java pour voir combien cela prend.
Si cela ne suffit pas, vous devez définir le paramètre Xmx jvm là où ils sont définis pour tomcat.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top