Directorio de artículos
El número de usuarios simultáneos que puede soportar un servidor no depende de cuántos núcleos tenga, sino de cuánta memoria consume cada proceso.
Esta afirmación puede sonar a provocación, pero es la experiencia más real y dolorosa en la industria de operaciones y mantenimiento.
¿Por qué la memoria es el principal cuello de botella?
Mucha gente ve un VPS con una CPU de 8 núcleos y 24 GB de memoria y, de forma subconsciente, piensa que puede ejecutar fácilmente cientos de procesos PHP-FPM.
Sin embargo, en realidad, el uso de memoria RSS de un solo proceso PHP suele ser de hasta 200 MB.
Este es el resultado obtenido mediante pruebas reales realizadas a través de la línea de comandos:
ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'
En el complejo marco de trabajo y el entorno de múltiples complementos de HestiaCP , especialmente sin la optimización de OPcache, 200 MB es lo habitual.
Esto significa que la memoria, y no la CPU, es el límite estricto que determina la concurrencia máxima.

Archivo de configuración recomendado (php-fpm.conf)
pm = dynamic
pm.max_children = 80
pm.start_servers = 16
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.max_requests = 500
pm.process_idle_timeout = 10s
request_terminate_timeout = 60s
Lógica de cálculo de parámetros y base de configuración
| Parámetros de configuración | Establecer valor | Base de cálculo y configuración del núcleo |
|---|---|---|
| pm | dynamic | El modo dinámico permite añadir o eliminar procesos de forma flexible en función de los requisitos de concurrencia, equilibrando la velocidad de respuesta y la utilización de la memoria. |
| pm.max_children | 80 | Memoria total de 24 GB menos el núcleo del sistema y MySQL/RedisDespués de Nginx, quedan aproximadamente 16 GB para PHP.16,384 MB / 200 MB ≈ 81.9Configurarlo a 80 puede eliminar por completo el error OOM (Out of Memory) durante una alta concurrencia. |
| pm.start_servers | 16 | El precalentamiento al inicio está configurado al doble del número de núcleos de CPU (8 núcleos × 2 = 16) para garantizar que el servicio pueda gestionar instantáneamente la concurrencia básica después de reiniciarse. |
| pm.min_servidores_de_reserva | 8 | Configure el número de núcleos de la CPU en 8 para garantizar que se pueda responder a las nuevas solicitudes en cualquier momento durante los períodos de bajo tráfico. |
| pm.máximo_servidores_de_repuesto | 24 | Ajústelo a 3 veces el número de núcleos de CPU (8 núcleos × 3 = 24) para mantener un número moderado de procesos después de que disminuya el tráfico, con el fin de manejar fluctuaciones leves. |
| pm.max_requests | 500 | Si un solo proceso alcanza una base grande de 200 MB, reducir el número de solicitudes a 500 antes de destruir y reconstruir puede limpiar las fugas de memoria implícitas más rápidamente. |
| pm.process_idle_timeout | 10s | 超出 min_spare_servers Los procesos inactivos se liberan automáticamente y se devuelven a la memoria del sistema después de 10 segundos sin solicitudes. |
Configuración esencial y sugerencias de optimización
1. Mecanismo anti-resaca por tiempo de espera
request_terminate_timeout = 60s Esa es la clave.
Puede finalizar de forma forzosa los procesos que se hayan quedado bloqueados debido a un interbloqueo de la base de datos o al bloqueo de una API de terceros.
Mientras tanto, Nginx fastcgi_read_timeout Debe mantenerse durante al menos 60 segundos; de lo contrario, el cliente lo recibirá prematuramente. 504 Gateway Timeout.
2. Estrategias para superar los cuellos de botella de la memoria
Un máximo de 80 procesos concurrentes significa que, en condiciones de concurrencia extremas, el sistema puede gestionar un máximo de 80 solicitudes HTTP dinámicas simultáneamente.
Si desea mejorar aún más la capacidad, debe centrarse en reducir el uso de memoria por proceso.
- Habilitar OPcache: Dónde
php.iniConfiguración mediaopcache.enable=1Yopcache.memory_consumption=256El almacenamiento en caché de código de bytes puede reducir el uso de memoria de un solo proceso de 200 MB a entre 60 y 100 MB. - Control razonable del límite de memoria:将
php.inimediomemory_limitCircunscrito a128M或256MPara prevenir scripts anormales individuales无限Consume mucha memoria.
Una vez que el uso de memoria de un solo proceso disminuye a 100 MB...pm.max_children Se puede actualizar de forma segura a 150 Además, la capacidad de concurrencia casi se ha duplicado.
Puntos de vista autorizados citados
Según las recomendaciones de la documentación oficial de Nginx :
"Las aplicaciones FastCGI siempre deben ser supervisadas con directivas de tiempo de espera para evitar el agotamiento de los recursos."
(Fuente: Documentación de Nginx)
El manual oficial de PHP establece claramente:
"pm.max_children define el número máximo de procesos hijos que se crearán. Esta es la directiva más importante."
(Fuente: Documentación de PHP-FPM)
Estas opiniones autorizadas están perfectamente alineadas con nuestras prácticas, lo que demuestra que la lógica de optimización no solo se basa en la experiencia, sino también en las mejores prácticas estandarizadas.
Conclusión: Mis puntos de vista y citas clave
En escenarios de alta concurrencia, la CPU es el motor, la memoria es el depósito de combustible y PHP-FPM es el gestor de la flota.
Por muy potente que sea el motor, si el depósito de combustible no es lo suficientemente grande, el convoy no llegará muy lejos.
Los verdaderos expertos no saturan los parámetros a ciegas, sino que calculan con precisión el uso de memoria de cada proceso para evitar tanto el desperdicio como el desbordamiento.
La esencia de la optimización reside en encontrar el equilibrio óptimo con recursos limitados.
Esto no es solo una tecnología, sino también una filosofía.
Por lo tanto, deja de creer que "el número de núcleos lo determina todo". Lo que realmente determina el límite de concurrencia es el control que tienes sobre la memoria.
Toma medidas y optimiza tu VPS al máximo, aprovechando al máximo cada gota de memoria.
Esperamos que el artículo "VPS de 8 núcleos y 24 GB sin memoria: optimización extrema del grupo de procesos PHP-FPM en HestiaCP", publicado en el blog de Chen Weiliang ( https://www.chenweiliang.com/ ), le sea útil.
No dudes en compartir el enlace de este artículo: https://www.chenweiliang.com/cwl-34509.html
