Hero Image

Tune PHP-FPM Performance on Ubuntu 24.04

Tune PHP-FPM Performance on Ubuntu 24.04

Process Manager modes

Mode Description Best for
static Fixed number of workers Predictable, dedicated servers
dynamic Workers scale between min/max General purpose
ondemand Workers spawned on request Low-traffic sites

Estimating pm.max_children

# Average PHP-FPM process memory (MB)
ps -ylC php-fpm --no-headers | awk '{sum+=$8} END {print sum/NR/1024 " MB avg"}'

Divide available RAM (minus OS + DB) by average process size:

pm.max_children = available_ram_mb / avg_process_mb

Example: 2048 MB RAM, 40 MB avg → max_children = 51

pm = dynamic
pm.max_children      = 50
pm.start_servers     = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests      = 500
pm.process_idle_timeout = 10s

Slow log

request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/www-slow.log

Monitor with:

tail -f /var/log/php-fpm/www-slow.log

Status page

pm.status_path = /fpm-status

Restrict access in Nginx:

location /fpm-status {
    allow 127.0.0.1;
    deny all;
    fastcgi_pass unix:/run/php-fpm/www.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}