Pregunta

Tengo una aplicación web que se ejecuta muy lentamente y ocasionalmente se cuelga. Es una aplicación Wicket relacionada con la escuela con informes y edición, y también un servlet que los clientes automáticos utilizan para obtener / publicar datos a través de HTTPS.

Durante los momentos de mayor actividad en los que se realiza una gran cantidad de edición / carga / descarga, la aplicación se vuelve lenta y no responde. Me sale Wicket " PageMap todavía bloqueado " errores Tomcat parece seguir avanzando. El uso de la memoria es manejable, aproximadamente 50M.

Configuré YourKit para obtener información de creación de perfiles, y durante un período ocupado descubrí que el 81% del tiempo de CPU de Tomcat se gasta aquí:

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)

En esta aplicación, tengo unos 250 clientes que sondean el servidor a través de SSL y solicitan actualizaciones cada 30 segundos. La mayoría de las veces, esto rápidamente devuelve una respuesta vacía. Ocasionalmente, hay una gran cantidad de actividad de DB, y una gran cantidad de datos (unos pocos MB) pueden enviarse de vuelta al cliente.

Entonces, ¿de qué es esta actividad del 81%? ¿Podrían algunos clientes con conexiones realmente lentas empantanar los hilos de Tomcat al hacer que esperen los cuerpos de solicitud entrantes?

¿Alguien ha visto algo como esto, o tiene algún consejo sobre cómo probar / solucionar / solucionar esto?

¿Fue útil?

Solución

Debe configurar un entorno de prueba e intentar reproducirlo con una prueba de carga.
De esa manera puedes aislar la causa. De lo contrario, hay demasiados factores.
Además, de esta manera puede probar soluciones sin poner en peligro su entorno de producción.

Otros consejos

El uso de la memoria es probablemente la causa.
Debe verificar el uso de memoria para el proceso de Java para ver cuánto se está obteniendo.
Si no está obteniendo suficiente, debe establecer el parámetro Xmx jvm donde sea que estén configurados para tomcat.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top