Tengo un problema con mi servidor de producción actual que acaba de comenzar en los últimos días. Estoy ejecutando apache httpd-2.2.3 y tomcat-5.5.20, conectado con mod_jk v1.3, y tengo un sitio Spring MVC alojado en el tomcat. Lo que está sucediendo es que después de aproximadamente 12 horas de suspensión, el sitio web se cuelga para nuestros usuarios. Cuando esto sucedió por primera vez pude ver varios de los siguientes errores en el catalina.outmod_jk perdiendo conexión con tomcat
WARN [org.apache.jk.core.MsgContext] Error sending end packet
java.net.SocketException: Broken pipe
Después de mirar esto llegué a comprender que esto significaba que un usuario había cancelado una solicitud antes de que se había completado y por lo que el regreso el camino estaba cerrado, por lo tanto, los datos no podían volver atrás. Al buscar en la web, parecía que esto podría hacer que el hilo permaneciera abierto en tomcat hasta que alcanzara su tiempo de espera. Esto parecía tener sentido desde que llegué al final del registro catalina.out cuando el gato se cayó
All threads (200) are currently busy, waiting. Increase maxThreads (200) or check the servlet status
La sugerencia fue hacer el siguiente cambio en la configuración de Apache httpd.conf JkModule
JkOptions +DisableReuse
Lo hice después de asegurar que no causaba ningún efecto secundario en nuestro sitio y funcionó bien al día siguiente, pero ayer aparecieron los mismos síntomas con el sitio web congelado. Esta vez, sin embargo, no hubo ningún error en catalina.out, simplemente dejamos de recibir solicitudes para el tomcat. Puedo ver en el registro de aplicación que ha recibido la última solicitud a las 17:31, y luego en el mod_jk.log puedo ver la siguiente
[Thu Sep 06 17:37:07 2012] [18784:53792] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (947): (worker1) can't receive the response message from tomcat, network problems or tomcat is down (127.0.0.1:8009), err=-104
[Thu Sep 06 17:37:07 2012] [18784:53792] [error] ajp_get_reply::jk_ajp_common.c (1536): (worker1) Tomcat is down or refused connection. No response has been sent to the client (yet)
y luego en mi error_log httpd
[Thu Sep 06 17:38:39 2012] [error] server reached MaxClients setting, consider raising the MaxClients setting
Así que pasaron 6 minutos antes de que recibiera un error y después de eso pasaron 1 min. 30 antes del error máximo de clientes. Reiniciar el tomcat también solucionó este problema en particular.
No ha habido cambios en nuestra configuración de apache, tomcat o conector excepto la que mencioné (configuración actual a continuación) pero hemos realizado cambios en nuestro sitio para realizar más solicitudes de Ajax por usuario. Entonces, lo que me gustaría entender es cómo puedo analizar nuestro sistema para comprender cuáles son los cambios de configuración correctos que puedo hacer para garantizar que no sobrecargue nuestro servidor, pero evito que ocurra este problema.
Gracias Iain
configuración actual
httpd.conf
Timeout 300
KeepAlive on
MaxKeepAliveRequests 100
KeepAliveTimeout 15
LoadModule jk_module modules/mod_jk.so
JkLogLevel error
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories +DisableReuse
workers.properties
# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.recycle_timeout=300
httpd-mpm.conf
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
configuración de Tomcat son sólo la configuración de Tomcat estándar
¿Consideró actualizarse a Tomcat 6/7? –
No configuré la pila tecnológica y esperaba no tener que actualizar. Si se trata de eso, entonces puede ser algo para probar, pero tengo la sensación de que se puede arreglar con la configuración correcta – sparkdoo