Constantemente tiene que recargar PHP-FPM

Tenemos un server bastante cargado que ejecuta nginx y PHP-FPM. Tenemos 6 sitios web en este server, ejecutando PHP-FPM y nginx. El software es todo vBulletin 3.8 y WordPress. Las bases de datos están en un server separado.

Ahora, porque estos son sitios web muy populares, normalmente tenemos 7-8.000 visitantes en línea a la vez, con cada página de golpear la database en su mayor parte. Creo que esta es la causa de nuestros problemas.

Debido a que tenemos muchas bases de datos grandes en el server MySQL, y porque las consultas podrían, honestamente, ser mucho mejor en el software, creo que MySQL ocasionalmente no puede devolver los resultados a PHP de manera oportuna, creando un efecto en cascada que eventualmente hace que todo se detenga hasta que vuelva a cargar PHP-FPM. Después de hacer eso, las cosas empiezan a funcionar bien otra vez.

La razón por la que estoy teniendo problemas para solucionar este problema es porque realmente no puedo distinguir nada de los loggings. En el logging de consultas lentas de MySQL, no veo nada de interés cuando ocurre el time de inactividad. En los loggings de nginx, veo miles de inputs diciendo que la request de lectura ha caducado o la connection ha caducado (a PHP-FPM). Y en los loggings de PHP-FPM, veo un montón de líneas que dice "ejecución de time de espera (31 seg), la terminación

Así que en este punto, simplemente no sé dónde search el problema. Obviamente, lo que está sucediendo está ocurriendo porque estos scripts no se están ejecutando con suficiente rapidez a veces (Normalmente se cargan en less de un segundo, pero sucede algo que hace que el time de carga se dispare). Esto ocurre muchas veces al día y se ha convertido en un gran problema para nosotros.

Por ahora sólo tengo un crontab para el service php5-fpm recarga cada 10 minutos, que se ocupa del problema de locking. Por supuesto, cuando PHP vuelve a cargar, nginx lanza un error de pasarela 502, por lo que no es mucho de una solución.

PHP está ejecutando caching de APC, si eso importa. He leído en algunos lugares que APC puede causar colgando bajo ciertas circunstancias.

Cualquier puntero sería útil. Realmente me gustaría no tener que preocuparme por esta máquina todo el time.

Más información se puede proporcionar, por supuesto. Solo hazme saber que necesitas.

Actualización: Acabo de copyr sobre apc.php a una raíz web y accedió a mirar nuestras statistics. Las cosas parecían buenas. Luego hice clic en el enlace para ir a statistics de usuario y BOOM el server instantáneamente colgado. Volví a cargar php-fpm y luego volví a cargar la página de statistics de usuario y pasó muy bien. Esperamos un minuto, vuelve a cargar, el server colgado de nuevo.

Así que esto definitivamente parece estar relacionado con APC. La pregunta es – ¿Cómo lo arreglamos?

Configuración de APC:

[apc] apc.enabled="1" apc.stat = "1" apc.max_file_size = "2M" apc.localcache = "1" apc.localcache.size = "256" apc.shm_segments = "1" apc.ttl = "3600" apc.user_ttl = "7200" apc.gc_ttl = "3600" apc.cache_by_default = "1" apc.filters = "" apc.write_lock = "1" apc.num_files_hint= "10000" apc.user_entries_hint="10000" apc.shm_size = "1G" apc.mmap_file_mask=/tmp/apc.XXXXXX apc.include_once_override = "0" apc.file_update_protection="2" apc.canonicalize = "1" apc.report_autofilter="0" apc.stat_ctime="0" 

Actualización 2: Hemos hecho algunos progresos en esto aquí. Resulta que el plugin de caching de WordPress (W3 Total Cache) es lo que causaba los fallos. Todavía no sabemos por qué, pero con él deshabilitado, hemos estado ejecutando PHP durante casi 4 horas sin reloads, sin ralentizaciones, sin lockings. Todavía estamos utilizando APC en los foros de vBulletin y no hay problemas en absoluto. ¿Hay alguna manera de determinar por qué APC se está estrellando? Me encantaría usarlo en nuestras instalaciones de WordPress, pero no a costa de un sistema frágil.

One Solution collect form web for “Constantemente tiene que recargar PHP-FPM”

Usted está usando php-fpm, por lo que sugiero ser más agresivo con la duración de los niños php-fpm se les permite vivir. Usted necesita encontrar el punto dulce entre los hilos de breve duración / los niños y la estabilidad. Los valores por defecto de php-fpm son generosos para cualquier sistema de producción, IMHO.

Me gustaría networkingucir el número de pm.max_requests para sus grupos de producción. Creo que el valor pnetworkingeterminado es 200. Empezaría a partir de los 50 y veré dónde te lleva.

A falta de / complementario a eso, también puedes probar estas opciones globales (AFAIK están todas desactivadas de forma pnetworkingeterminada):

 emergency_restart_threshold=3 emergency_restart_interval=1m process_control_timeout=5s 

¿Qué significa esto? Si 3 processs secundarios de PHP-FPM salen con SIGSEGV o SIGBUS (es decir, locking) dentro de 1 minuto, se supone que PHP-FPM se reiniciará automáticamente. Los processs secundarios esperan 5s para una reacción sobre las señales del maestro.

Esto debería mantener su grupo de hilos de trabajo PHP agradable, fresco y limpio. Cuanto más time un trabajador está autorizado a proporcionar las requestes, más inestable que obtendrá. También hay un mayor riesgo de pérdidas de memory.

Aquí hay una buena visión general de todas las opciones de configuration que he mencionado aquí, así como otros: http://myjeeva.com/php-fpm-configuration-101.html

Esperamos que estos consejos le ayuden! Recuerde ajustar y observar, por desgracia no parece ser una regla general para todo esto, hay demasiadas variables que afectan el comportamiento de PHP y la estabilidad.

  • Cómo evitar index.php en la ruta Zend Framework utilizando Nginx rewrite
  • Codeigniter URL sólo funciona para el enrutador pnetworkingeterminado
  • Nginx actualiza a 1.8 - Ahora consigue 502 mala puerta de enlace
  • nginx + php-fpm (chroot). No se especificó ningún file de input
  • xdebug host centos remoto de mac
  • php-fpm versión 5.4 con nginx reiniciando constantemente
  • Error "Archivo no encontrado." Con nginx y php-fpm
  • Necesita el equivalente SCRIPT_URL de Apache en nginx + php-fpm
  • Obtener 502 mala puerta de enlace después de actualizar php a 5.5
  • nginx y php-fpm "Script primario desconocido"
  • Configuración de nginx y PHP5-FPM
  • Nginx "o el ciclo de networkingirección interna mientras internamente networkingirigir a" /index.html ""
  • ¿Cuál es la diferencia entre usar upstream y location para php-fpm?
  • El linux y los temas del servidor de Windows, como ubuntu, centos, apache, nginx, debian y consejos de red.