Come appare il messaggio
[29-Oct-2026 10:14:52] WARNING: [pool www] server reached pm.max_children setting (5), consider raising itCause frequenti
- Script lenti tengono occupati i worker a lungo: una query lenta, un'API esterna lenta, un lock.
- Un picco di traffico o dei bot colpiscono pagine PHP senza cache.
pm.max_childrenè semplicemente troppo basso per il carico normale del server.- In passato il valore è stato alzato troppo, PHP ora esaurisce la RAM e i worker vengono terminati (vedi la pagina sull'OOM).
- Richieste di lunga durata come export o import bloccano i worker.
Verifica
- Impostazioni attive del pool (senza commenti)
grep -hE '^(pm|pm\.[a-z_]+) *=' /etc/php/*/fpm/pool.d/*.conf - Quante volte il pool ha raggiunto il limite?
- Memoria media per worker PHP-FPM
ps -eo rss,cmd | awk '/[p]hp-fpm: pool/ {s+=$1; n++} END {if (n) print n " worker, " s/n/1024 " MB di media"}' - Memoria libera sul server
free -m
Soluzione
- Dimensiona il pool in base alla memoria:
pm.max_children= RAM che puoi dare a PHP divisa per la dimensione media dei worker del controllo sopra. - Impostalo nel file del pool sotto
/etc/php/<versione>/fpm/pool.d/www.conf, insieme apm.start_servers,pm.min_spare_serversepm.max_spare_serverscoerenti perpm = dynamic. - Trova le richieste lente: imposta nel pool
request_slowlog_timeout = 5seslowlog = /var/log/php-fpm-slow.loge leggi gli stack trace. - Riduci il carico: metti in cache le pagine, blocca i bot abusivi, sposta i job lunghi fuori dalle richieste web.
- Riavvia il servizio PHP-FPM della tua versione e controlla il log per vedere se l'avviso scompare.
Domande frequenti
Posso mettere pm.max_children molto alto?
No. Ogni worker usa memoria. Se il totale supera la RAM, il kernel termina processi o il server va in swap, peggio di richieste in coda.
Quale modalità pm devo usare?
dynamic è un buon default. ondemand risparmia RAM su server poco usati ma è più lento alle prime richieste, static serve per server molto carichi con memoria prevedibile.