J'ai une application Web (printemps/hibernation) fonctionnant sur Tomcat 7.0.23. Le symptôme est qu'après avoir fonctionné pendant quelques jours (4 à 5 jours typiquement) la réponse devient très lente. La page qui charge généralement en 2 secondes prend n'importe où de 30 à 50 secondes. Un redémarrage ramène la réponse à la normale (2 sec). J'ai pris des vidages de threads avant et après. Je vois le fil dans question (qui prend plus de temps pour répondre) a un verrou. Voici l'extrait .Webapp devient lent sur Tomcat
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200)
at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
- locked <0x0000000799446298> (a
org.apache.tomcat.util.net.SocketWrapper)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
En regardant dans le code, il existe une méthode synchronisée et que explique la serrure. Mais, je me demande si le verrouillage ralentit les choses, alors pourquoi ne pas se manifester à partir du nouveau départ et pourquoi seulement après en cours d'exécution pendant quelques jours. Vous vous demandez où regarder. Des indices? Merci d'avance.