Directory articoli
Il numero di utenti simultanei che un server può gestire non dipende dal numero di core di cui dispone, bensì dalla quantità di memoria consumata da ciascun processo.
Questa affermazione potrebbe sembrare una provocazione, ma rappresenta l'esperienza più reale e dolorosa nel settore delle operazioni e della manutenzione.
Perché la memoria rappresenta il principale collo di bottiglia?
Molte persone, vedendo un VPS con una CPU a 8 core e 24 GB di memoria, pensano inconsciamente di poter eseguire facilmente centinaia di processi PHP-FPM.
Tuttavia, in realtà, l'utilizzo della memoria RSS da parte di un singolo processo PHP può spesso raggiungere i 200 MB.
Questo è il risultato ottenuto tramite test effettivi da riga di comando:
ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'
Nella complessa struttura e nell'ambiente multi-plugin di HestiaCP , soprattutto senza l'ottimizzazione di OPcache, 200 MB sono la norma.
Ciò significa che la memoria, e non la CPU, rappresenta il limite invalicabile che determina il numero massimo di operazioni simultanee.

File di configurazione consigliato (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
Logica di calcolo dei parametri e base di impostazione
| Parametri di configurazione | Impostazione del valore | Calcolo di base e impostazione |
|---|---|---|
| pm | dynamic | La modalità dinamica consente l'aggiunta o la rimozione elastica di processi in base ai requisiti di concorrenza, bilanciando velocità di risposta e utilizzo della memoria. |
| pm.max_bambini | 80 | 24 GB di memoria totale meno kernel di sistema e MySQL/RedisDopo Nginx, rimangono circa 16 GB per PHP.16,384 MB / 200 MB ≈ 81.9Impostandolo a 80 è possibile eliminare completamente gli errori OOM (Out of Memory) in presenza di un elevato numero di processi concorrenti. |
| pm.start_servers | 16 | Il preriscaldamento all'avvio è impostato al doppio del numero di core della CPU (8 core × 2 = 16) per garantire che il servizio possa gestire immediatamente la concorrenza di base dopo il riavvio. |
| pm.min_server_di_risparmio | 8 | Imposta il numero di core della CPU a 8 per garantire che le nuove richieste possano essere gestite in qualsiasi momento durante i periodi di basso traffico. |
| pm.max_server_di_risparmio | 24 | Impostalo a 3 volte il numero di core della CPU (8 core × 3 = 24) per mantenere un numero moderato di processi anche dopo che il traffico si è ridotto, in modo da gestire lievi fluttuazioni. |
| pm.max_requests | 500 | Se un singolo processo raggiunge una base di memoria di grandi dimensioni, pari a 200 MB, ridurre il numero di richieste a 500 prima di distruggere e ricostruire il processo può consentire di eliminare più rapidamente le perdite di memoria implicite. |
| pm.process_idle_timeout | 10s | 超出 min_spare_servers I processi inattivi vengono automaticamente rilasciati e restituiti alla memoria di sistema dopo 10 secondi di inattività. |
Impostazioni di supporto essenziali e suggerimenti per l'ottimizzazione
1. Meccanismo anti-postumi da timeout
request_terminate_timeout = 60s Ecco il punto cruciale.
Può terminare forzatamente i processi bloccati a causa di un deadlock del database o del blocco di API di terze parti.
Nel frattempo, Nginx fastcgi_read_timeout Deve essere mantenuto per almeno 60 secondi, altrimenti il cliente lo riceverà prematuramente. 504 Gateway Timeout.
2. Strategie per superare i colli di bottiglia della memoria
Un massimo di 80 processi simultanei significa che, in condizioni di concorrenza estreme, il sistema può gestire simultaneamente un massimo di 80 richieste HTTP dinamiche.
Se si desidera migliorare ulteriormente la capacità, l'attenzione dovrebbe concentrarsi sulla riduzione dell'utilizzo della memoria per processo.
- Abilita OPcache: 在
php.iniConfigurazione mediaopcache.enable=1Eopcache.memory_consumption=256La memorizzazione nella cache del bytecode può ridurre l'utilizzo della memoria di un singolo processo da 200 MB a 60-100 MB. - Controllo ragionevole del limite di memoria:将
php.inimezzomemory_limitLimite a128M或256MPer prevenire singoli script anomali无限Consuma molta memoria.
Quando l'utilizzo della memoria di un singolo processo scende a 100 MB...pm.max_children Può essere aggiornato in sicurezza a 150 Inoltre, la capacità di gestione simultanea è quasi raddoppiata.
Punti di vista autorevoli citati
Secondo le raccomandazioni contenute nella documentazione ufficiale di Nginx :
"Le applicazioni FastCGI dovrebbero essere sempre monitorate con direttive di timeout per evitare l'esaurimento delle risorse."
(Fonte: Documentazione Nginx)
Il manuale ufficiale di PHP afferma chiaramente:
"pm.max_children definisce il numero massimo di processi figli da creare. Questa è la direttiva più importante."
(Fonte: Documentazione PHP-FPM)
Queste autorevoli opinioni sono perfettamente in linea con le nostre pratiche, a dimostrazione che la logica di ottimizzazione non si basa solo sull'esperienza, ma anche su best practice standardizzate.
Conclusione: i miei punti di vista e le mie citazioni chiave
Negli scenari ad alta concorrenza, la CPU è il motore, la memoria è il serbatoio del carburante e PHP-FPM è il gestore della flotta.
Per quanto potente sia il motore, se il serbatoio del carburante non è abbastanza capiente, il convoglio non andrà molto lontano.
I veri esperti non impostano ciecamente i parametri al massimo, ma calcolano con precisione l'utilizzo della memoria di ciascun processo per evitare sprechi e overflow.
L'essenza dell'ottimizzazione consiste nel trovare l'equilibrio ottimale con risorse limitate.
Non si tratta solo di una tecnologia, ma anche di una filosofia.
Pertanto, smettete di credere che "il numero di core determini tutto". Ciò che determina realmente il limite di concorrenza è il vostro controllo sulla memoria.
Agisci subito e ottimizza il tuo VPS al massimo delle sue potenzialità, sfruttando al meglio ogni singolo millimetro di memoria.
Speriamo che l'articolo "VPS a 8 core da 24 GB con memoria insufficiente? Ottimizzazione estrema del pool di processi PHP-FPM con HestiaCP" condiviso sul blog di Chen Weiliang ( https://www.chenweiliang.com/ ) possa esservi utile.
Sentitevi liberi di condividere il link di questo articolo: https://www.chenweiliang.com/cwl-34509.html
