Título: Procesos de apache atorados por mucho tiempo Publicado por: Cronck en 17 Julio 2014, 17:58 pm Buenos dias a todos..
Les cuento... Hace unos dias tuve un problema con el servicio apache, de mi servidor, repentinamente dejo de contestar solicitudes y el sitio arroja error 503. Tuve que reinicar el servicio httpd para que pudiera operar nuevamente. Revisando entre los logs solo encontre algunas cosas que daban referencia a que el fastcgi estaba operando mal. Citar [Tue Jul 15 18:26:49 2014] [notice] caught SIGTERM, shutting down [Tue Jul 15 18:26:57 2014] [error] FastCGI process 7154 still did not exit, terminating forcefully [Tue Jul 15 18:26:57 2014] [error] FastCGI process 7151 still did not exit, terminating forcefully [Tue Jul 15 18:26:59 2014] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) [Tue Jul 15 18:27:00 2014] [warn] RSA server certificate CommonName (CN) `Parallels Panel' does NOT match server name!? investigando encontré que es un problema del tiempo de sesión que maneja el fastcgi, por lo que aumente el timeout de 40 a 90 También aumente los valores del nginx en el parametro fastcgi_buffer de 32 a 256 No se ha presentado nuevamente el problema. Pero ya entrando al tema como tal, para monitorear el comportamiento de apache, active el server-status y encontre algunas cosas que son las que quiero consultar con ustedes. He estado viendo que si renicio el servicio los procesos operan normalmente, pero despues de un tiempo hay procesos que se quedan pegados por mucho tiempo desconozco que es lo que esten haciendo o por que apache los retiene. :¬¬ Tambien desconozco si sea por los cambios que hecho en el fastcgi. Básicamente requiero saber por que se quedan pegados, que procesos son y saber si esto nos esta ocacionando el error de que deje de operar el apache :-[ Los procesos que se quedan pegados son los que estan dentro del cuadro rojo (http://75.126.190.221/procpegados.png) De antemano muchas gracias por el apoyo Título: Re: Procesos de apache atorados por mucho tiempo Publicado por: Cronck en 18 Julio 2014, 17:35 pm Complicado mi caso..
Por que no se por donde comenzar a buscar Título: Re: Procesos de apache atorados por mucho tiempo Publicado por: Cronck en 18 Julio 2014, 23:26 pm Hola creo que he encontrado algo mas
Veo que esos procesos que marca el Server-Status son procesos muertos que aun no ha soltado apache. Estos procesos se van acumulto hasta que apache deja de responder.. creo que por ahi va mi asunto... alguna idea? (http://75.126.190.221/processdead.png) Título: Re: Procesos de apache atorados por mucho tiempo Publicado por: MinusFour en 19 Julio 2014, 01:27 am Supongo que la lista de procesos va incrementando hasta que el apache ya no puede responder, por la limitación de MaxClients.
Lo del OPTIONS * HTTP/1.1 es del Internal Dummy Connection para revisar que los procesos están listos para escuchar nuevas peticiones. https://wiki.apache.org/httpd/InternalDummyConnection Dependiendo del modulo que estes usando para el multi-process, el servidor deja un maximo de procesos escuchando. Yo me imagino que tus respuestas del CGI tardan mucho en cerrarse y el servidor empieza a abrir procesos hasta que ya no puede y se satura el server. Revisa los scripts que tengas funcionando con CGI no vaya a ser que se esten quedando colgados. Título: Re: Procesos de apache atorados por mucho tiempo Publicado por: el-brujo en 19 Julio 2014, 12:12 pm ¿Apache o ngnix?
Citar También aumente los valores del nginx en el parametro fastcgi_buffer de 32 a 256 ¿Apache para Windows o Linux? Un error 503 es Error HTTP 503 Service unavailable (Servicio no disponible) ¿Cuál es tu directiva MaxClients en el fichero de configuración de Apache httpd.conf? Revisa de nuevo el fichero error_log del apache y añade la directiva: Citar LogLevel info Por defecto es #LogLevel warn Reinicia y mira de nuevo el error_log te dará pistas si faltan procesos del apache o cualquier otro problema. En el server-status mira si tienes "idle workers" libres. En teoría los procesos que tu dices que se quedan "pegados" durante mucho tiempo, mucho no puede ser, mira la directiva Timeout del httpd.conf Por defecto son 300 segundos creo, mira de bajarlo un poco. Y los procesos tal y como te dicen OPTIONS * HTTP/1.0 son completamente normales. En la captura que has puesto son proceos con un . Citar Scoreboard Key: "_" Waiting for Connection, "S" Starting up, "R" Reading Request, "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup, "C" Closing connection, "L" Logging, "G" Gracefully finishing, "I" Idle cleanup of worker, "." Open slot with no current process Eso quiere decir: Citar Open slot with no current process Si fuera un proceso "pegado" activo sería W o R K, C aparcen con frecuencia pero duran apenas segundos los procesos L sólo aparecen cuando hay problemas de rendimiento con el disco duro, y los G cuando reiniciamos el apache con la opción gracefully Citar /usr/local/apache2/bin/apachectl -k graceful Podrias mirar el número de conexiones en el puerto 80 para saber si hay alguna ip qu está haciendo demasiadas peticiones: Citar netstat -an | grep :80 | awk '{ print $5 }' | awk -F: '{ print $1 }' | sort | uniq -c | sort -n Título: Re: Procesos de apache atorados por mucho tiempo Publicado por: Cronck en 21 Julio 2014, 23:36 pm Muchas gracias MinusFour y a el-brujo por sus comentarios:
Voy a definir desde el principio. el-brujo Citar ¿Apache o ngnix? Es un servido que tiene instalado apache y usa ngninx como proxy de apache y es un Centos y usa el plesk para la administracion.Citar El servidor cuenta con 24 Cores y 24 GB en RAM No he podido dar con el problema, pues de la nada deja de operar apache, y tengo que reinicar el servicio de apache. Cuando se traba, solo aparece servicio no disponible ya realize el cambio en el httpd.conf, de warn a info y me ha estado arrojando estos warning: Citar [Mon Jul 21 16:23:50 2014] [info] mod_fcgid: process /var/www/cgi-bin/cgi_wrapper/cgi_wrapper(6007) exit(lifetime expired), terminated by calling exit(), return code: 0 [Mon Jul 21 16:23:50 2014] [info] mod_fcgid: process /var/www/cgi-bin/cgi_wrapper/cgi_wrapper(6006) exit(lifetime expired), terminated by calling exit(), return code: 0 [Mon Jul 21 16:23:54 2014] [info] mod_fcgid: server xcaretexperiencias.com:/var/www/cgi-bin/cgi_wrapper/cgi_wrapper(6954) started [Mon Jul 21 16:24:06 2014] [info] mod_fcgid: process /var/www/cgi-bin/cgi_wrapper/cgi_wrapper(6340) exit(lifetime expired), terminated by calling exit(), return code: 0 [Mon Jul 21 16:24:06 2014] [info] mod_fcgid: process /var/www/cgi-bin/cgi_wrapper/cgi_wrapper(6433) exit(lifetime expired), terminated by calling exit(), return code: 0 [Mon Jul 21 16:24:06 2014] [info] mod_fcgid: process /var/www/cgi-bin/cgi_wrapper/cgi_wrapper(6330) exit(lifetime expired), terminated by calling exit(), return code: 0 [Mon Jul 21 16:24:10 2014] [info] mod_fcgid: server en.xcaretexperiencias.com:/var/www/cgi-bin/cgi_wrapper/cgi_wrapper(7223) started [Mon Jul 21 16:24:16 2014] [info] mod_fcgid: process /var/www/cgi-bin/cgi_wrapper/cgi_wrapper(6608) exit(lifetime expired), terminated by calling exit(), return code: 0 [Mon Jul 21 16:24:19 2014] [info] mod_fcgid: server pt.xcaretexperiencias.com:/var/www/cgi-bin/cgi_wrapper/cgi_wrapper(7390) started [Mon Jul 21 16:24:23 2014] [info] mod_fcgid: server de.xcaretexperiencias.com:/var/www/cgi-bin/cgi_wrapper/cgi_wrapper(7467) started [Mon Jul 21 16:24:23 2014] [info] mod_fcgid: server it.xcaretexperiencias.com:/var/www/cgi-bin/cgi_wrapper/cgi_wrapper(7469) started el-brujo: Citar En el server-status mira si tienes "idle workers" libres. Estos son los datos del service-status: Citar Current Time: Monday, 21-Jul-2014 16:25:48 CDT Restart Time: Monday, 21-Jul-2014 12:38:40 CDT Parent Server Generation: 0 Server uptime: 3 hours 47 minutes 8 seconds Total accesses: 518225 - Total Traffic: 761.7 MB CPU Usage: u208.37 s87.88 cu0 cs0 - 2.17% CPU load 38 requests/sec - 57.2 kB/second - 1541 B/request 2 requests currently being processed, 53 idle workers Estos son los valores que tengo anexado al httpd.conf Citar Timeout 60 KeepAlive Off MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> StartServers 8 MinSpareServers 20 MaxSpareServers 60 ServerLimit 456 MaxClients 456 MaxRequestsPerChild 10000 </IfModule> <IfModule worker.c> StartServers 4 MaxClients 300 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule> y los valores del fcgid.conf es: Citar LoadModule fcgid_module modules/mod_fcgid.so <IfModule mod_fcgid.c> <IfModule !mod_fastcgi.c> AddHandler fcgid-script fcg fcgi fpl </IfModule> FcgidIPCDir /var/run/mod_fcgid/sock FcgidProcessTableFile /var/run/mod_fcgid/fcgid_shm FcgidIdleTimeout 90 FcgidProcessLifeTime 30 FcgidMaxProcesses 20 FcgidMaxProcessesPerClass 8 FcgidMinProcessesPerClass 0 FcgidConnectTimeout 30 FcgidIOTimeout 100 FcgidInitialEnv RAILS_ENV production FcgidIdleScanInterval 10 </IfModule> estuve monitoreando el numero de conexiones al puerto 80, y se mantiene muy estable: el-brujo Citar netstat -an | grep :80 | awk '{ print $5 }' | awk -F: '{ print $1 }' | sort | uniq -c | sort -n Citar 5 187.232.202.137 5 187.242.225.129 5 200.56.194.104 5 86.172.192.107 6 0.0.0.0 6 148.243.168.8 6 187.147.191.105 6 187.153.53.116 6 187.164.56.118 6 187.185.158.112 6 187.209.93.195 6 187.252.41.88 6 189.129.202.201 6 189.133.136.180 6 189.144.41.253 6 189.152.69.127 6 189.163.93.29 6 189.165.176.122 6 189.189.75.119 6 189.198.12.180 6 189.200.56.211 6 189.253.82.28 6 189.254.19.194 6 190.146.150.102 6 201.103.136.9 6 201.166.31.180 6 54.92.93.227 6 84.232.27.231 7 177.228.82.167 7 187.254.245.130 7 201.172.180.125 8 177.124.74.55 9 187.157.41.2 9 201.110.0.129 10 187.194.92.67 12 107.203.14.9 12 118.130.162.70 12 72.201.93.184 13 38.88.230.130 17 189.210.91.162 Realmente ya no se por donde buscarle No logro dar con el problema del porque el apache deja de operar Que recomiendan hacer? Título: Re: Procesos de apache atorados por mucho tiempo Publicado por: MinusFour en 22 Julio 2014, 00:39 am ¿Creo que estás usando prefork no? Yo digo que tienes tantos idle workers porque tu MaxSpareServers es 60 (apache mata el idle worker 61) y MinSpareServers es 20 (Apache tiene al menos 20 procesos escuchando nuevas peticiones). Prueba así:
MinSpareServers 10 MaxSpareServers 15 Título: Re: Procesos de apache atorados por mucho tiempo Publicado por: Cronck en 22 Julio 2014, 01:35 am De esta forma lo tenia por la mañana:
Citar <IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 456 MaxClients 456 MaxRequestsPerChild 10000 </IfModule> Pero me estubieron saliento estos mensajes en el error_log Citar [Mon Jul 21 12:39:24 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 16 children, there are 15 idle, and 39 total children si usa prefotk ni servidor Título: Re: Procesos de apache atorados por mucho tiempo Publicado por: MinusFour en 22 Julio 2014, 02:30 am Entonces yo creo que no te deberías preocupar por esos procesos. Si tienes alrededor de 40~ requests por segundo, yo creo que tener alrededor de 45 Max está bien. En el momento que pusiste cuantos idle workers tenías solo había 2 requests activos, estoy seguro que si sigues checando vas a notar como tienes menos idle workers.
Aún así, el problema no creo que este con estos procesos. Yo creo que tiene que ver con el CGI. Edit: Tras buscar un poco, me di cuenta que estás usando SUExec, revisa el log de SUExec para ver si hay algún error por ahí. Los errores de SUExec aparentemente se muestran diferente en el log de apache (no es la verdadera causa de tu error). Título: Re: Procesos de apache atorados por mucho tiempo Publicado por: Cronck en 23 Julio 2014, 23:31 pm Nuevamente muchas gracias por el seguimiento
Les comento que estado monitoreando el comportamiento de apache, desde el dia lunes y hoy tuve un problema nuevamente y estoy tratando de entender el por que de la caida de mi sitio. Bueno vamos al grano: 1.- estuve investigando y encontré que el parámetro MaxRequestsPerChild es el que controla el tiempo de actividad de cada proceso, el valor que tenia era de 10000 y al cumplirse ese plazo, los procesos pasaban al estado muerto (dead) tal como lo mostré en las imágenes anteriores. Este parámetro lo baje a 4000 que es el que trae apache por default Pero nuevamente al cumplirse ese tiempo la mitad de los procesos quedan muertos y se quedan ahi sin que apache los pueda eliminar (http://75.126.190.221/procesosmuertos.png) Espere mas tiempo para ver que pasaba cuando los procesos que estaban operando actualmente, al llegar al segundo ciclo, el sistema colapso y comenzó a arrojar errores mi sitio, de que no estaba accesible. 2.- Tengo unas incongruencias si este hecho fue un problema de los procesos que se quedaron pegados, o fue un tipo de sobre carga la incongruencia viene por que encontre 2 hecho pegados, uno que se cumplia el ciclo nuevamente de los 4000 MaxRequestsPerChild y ademas encontre una ip con muchas visitas Normalmente el sitio se estuvo comportando con esos valores de los idle workers y siempre se mantubo asi: (http://75.126.190.221/normal.png) sobre el problema de hoy, me fije que los recuest eran mas que los idle workers esta captura lo hice en el momento que fallo el sitio. (http://75.126.190.221/sobrecarga.png) Lo que estaba mirando era que tenia muchos procesos ::1 {OPTIONS * HTTP/1.0} muertos en total contabilice 162: (http://75.126.190.221/1.png) Pero también encontré una IP que estaba generando muchas peticiones en ese preciso momento, en total encontré 76: (http://75.126.190.221/sobrecarga2.png) yo creo que el problema viene en que tengo mal configurado los valores de apache y cgi, pues casi cada tercer dia me pasa lo mismo, tengo que reinicar el motor de apache para que se estabilice. Estos son los proceso de cgi: (http://75.126.190.221/cgi.png) Pero no se por donde comenzar a ajustar para llegar a lo optimo. Que me recomiendan, tengo un buen servidor pero no lo tengo optimizado para la batalla. Alguna idea? Título: Re: Procesos de apache atorados por mucho tiempo Publicado por: MinusFour en 24 Julio 2014, 04:21 am (http://75.126.190.221/sobrecarga.png) El primer server-status parece normal, se llegaron a crear hasta 60 servidores como lo indica el limite y ese único proceso que se ve ahí (La W) es el server-status que estás haciendo. En el segundo... lo que creo que estaba sucediendo es que estabas recibiendo muchas conexiones y por eso el apache empezo a lanzar muchos procesos. Apache debería empezar a cortar los procesos idle que esten por arriba del limite de MaxSpareServers. Los procesos DEAD si están muertos, y no están pegados. Los puedes ver como ".", los que están READY aparecen como "_" y los que están escribiendo son "W". Sería bueno ver una gráfica de los requests. Otra cosa rara que me di cuenta es que en tu segundo log hay exactamente 257 procesos... ¿no será que por eso se cae tu servidor? ¿Que de algun modo no te este tomando la directiva de ServerLimit? Título: Re: Procesos de apache atorados por mucho tiempo Publicado por: STELLA_RONDON en 14 Enero 2016, 14:50 pm Hola, pudiste solucionar el problema con apache, yo tengo el mismo problema y ya no se que hacer, me puedes ayudar?
|