Recientemente descubrí que la memoria del blog siempre se "comía" de vez en cuando. Después de iniciar sesión en el backend, ocasionalmente había retrasos. Al principio sospeché que se debía a un intercambio insuficiente, así que agregué un. Algunos G de Swap al host VPS y observé. Después de un tiempo, descubrí que no importa cuán grande fuera el Swap, ¡fue "comido" lentamente!
Es obvio que algunos servicios PHP han estado ocupando la memoria del VPS y no la han liberado, lo que provoca que se llame a Swap después de que se agote la memoria física. Obviamente, Swap no se ejecuta tan eficientemente como la memoria física, por lo que el proceso se vuelve. atascado. Teniendo en cuenta que el sitio web de WordPress utiliza actualmente demasiados temas y complementos, es normal que ocurra esta situación.
En la arquitectura LNMP, PHP se ejecuta en modo FastCGI. Según la declaración oficial, php-cgi reciclará toda la memoria utilizada por el script al final de cada solicitud, pero no la liberará al sistema operativo, sino que continuará. para retenerlo. Responda a la siguiente solicitud PHP. Y php-fpm es el administrador de procesos FastCGI, utilizado para controlar la memoria y los procesos de php.
Por lo tanto, la solución es optimizar el número total de procesos y la memoria ocupada por un solo proceso a través de php-fpm, resolviendo así el problema de que el proceso php-fpm ocupa mucha memoria y no libera memoria. Más métodos de optimización de servidores Linux y experiencia en creación de sitios web, además de:
- Tutorial de operación y sintaxis básica de tareas programadas del comando Linux Crontab-VPS/Automatización de servidores
- Evaluación de rendimiento de velocidad del host VPS de Alibaba Cloud Japan-Línea NTT de Japón SoftBank Hong Kong
- La resolución de nombres de dominio DNS permite que DNSSEC evite el secuestro de DNS: configuración de DNS de Google Cloud DNSSEC
PD: actualizado el 14 de diciembre de 2018, Si la memoria y el rendimiento de su host VPS no son muy buenos, es mejor habilitar el almacenamiento en caché en este momento para ahorrar en gran medida el consumo de recursos: WordPress habilita la aceleración de caché Nginx fastcgi_cache método -Ejemplo de configuración de Nginx.
PD: Actualizado el 29 de septiembre de 2019, Debido al artefacto de optimización del servidor ngx_pagespeed desarrollado por Google, integra un conjunto completo de herramientas de optimización, como carga retrasada de imágenes, webp adaptativo, optimización de JS y CSS, y optimización de imágenes. Optimización: artefacto de optimización de PageSpeed Server: Nginx implementa el módulo ngx_pagespeed y experimenta efectos acelerados.
1. Analizar y determinar el uso de memoria de php-fpm
Si descubre que el host VPS está bloqueado, primero verifique el uso de la memoria. Los comandos más utilizados son Top, Glances, Free, etc. Los amigos que no conozcan estos comandos pueden consultar primero el tema sobre si la estación minera lo hace: Sistema Linux Resumen de comandos de monitoreo: CPU maestra, memoria, E/S de disco, etc. para encontrar cuellos de botella en el rendimiento.
Utilice el comando Vistazos y presione m para ver el uso de memoria del proceso actual del host VPS y ordénelos de mayor a menor memoria ocupada (o use el comando Superior y presione M, el efecto es el mismo). Como se muestra a continuación (haga clic para ampliar):
3.2 Reducir la cantidad de procesos php-fpm
Si la memoria de su host VPS está ocupada y agotada, puede verificar la cantidad de procesos php-fpm. Calcule de acuerdo con la cantidad de procesos php-fpm = memoria/2/30. 1GB de memoria son 10- Entre 20, depende de los complementos que cargue tu PHP.
3.3 ejemplo de configuración de php-fpm
Aquí, se utiliza como demostración una configuración VPS de php-fpm con 1 GB de memoria. En el funcionamiento real, el valor de configuración debe considerarse en función del rendimiento del propio servidor, PHP, etc.
pm = dynamic #dynamic和ondemand适合小内存。
pm.max_children = 15 #static模式下生效,dynamic不生效。
pm.start_servers = 8 #dynamic模式下开机的进程数量。
pm.min_spare_servers = 6 #dynamic模式下最小php-fpm进程数量。
pm.max_spare_servers = 15 #dynamic模式下最大php-fpm进程数量。
4. Resuelva el problema de que el proceso php-fpm no libera memoria
El problema anterior de reducir el uso de memoria de php-fpm se logra reduciendo el número total de procesos php-fpm. Durante el uso real, se descubre que el proceso php-fpm todavía tiene el problema de ocupar memoria durante mucho tiempo. liberándolo. La solución es reducir la cantidad de pm.max_requests.
El número máximo de solicitudes, max_requests, significa que cuando el número de solicitudes procesadas por un proceso PHP-CGI se acumula en max_requests, el proceso se reiniciará automáticamente, logrando así el propósito de liberar memoria. Tome como ejemplo la configuración del host VPS con 1 GB de memoria (si el valor que estableció no alcanza el nivel de liberación de memoria, puede continuar bajándolo):
pm.max_requests = 500
Cuando el proceso php-fpm alcance el valor establecido por pm.max_requests, el proceso se reiniciará para liberar memoria. La siguiente imagen es el resultado después de mi prueba. Se puede ver que el proceso php-fpm finalizó por la fuerza y se liberó la memoria.
5. Resumen
Para grandes requisitos de memoria y concurrencia y disponibilidad, se recomienda utilizar el modo de administración estática + el pm.max_children más grande. Si se trata de un servidor con poca memoria, se recomienda utilizar el modo dinámico o bajo demanda y reducir la cantidad de procesos pm.start_servers y pm.max_spare_servers.
¿Por qué no ajusté los parámetros para lograr el efecto deseado? Según la experiencia de wzfou.com, los parámetros del archivo de configuración php-fpm no se pueden generalizar. Deben ajustarse en función del rendimiento del propio servidor, el contenido dinámico WEB y los requisitos de disponibilidad. Lo mejor es comprobar si hay una pérdida de memoria.
Actualizado el 9 de octubre de 2019, Si sus parámetros de php-fpm se ajustan demasiado pequeños, puede ocurrir un error 502 Solución: resuelva el error 502 en el menú de guardar edición de fondo de WordPress.