Ubuntu 上 PHP-FPM 性能调优要点
一 基础准备与监控
二 进程池关键参数与计算
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{sum+=$1} END {printf "%.0fM\n", sum/NR/1024}',得到如 60M。max_children ≈ 可用内存 / 单进程 RSS 设定上限。max_children ≈ 2000/60 ≈ 33;可按并发与峰值再微调。start_servers 取 5–10,min_spare_servers 与 max_spare_servers 围绕峰值与回落速度设置,且需满足 max_spare_servers < max_children。三 PHP 运行时与 OPcache 建议
memory_limit:如 128M–256M(依据业务对象大小与框架占用)。max_execution_time:如 30–300s(长任务建议异步化)。post_max_size / upload_max_filesize:与业务上传需求匹配。opcache.enable=1opcache.memory_consumption=128(单位 MB)opcache.interned_strings_buffer=8opcache.max_accelerated_files=4000–10000(按代码量调整)opcache.revalidate_freq=60(开发环境可设更小以快速生效)四 Web 服务器与连接优化
listen = /run/php/php{version}-fpm.sock),并正确设置权限(如 listen.owner=www-data 等)。SCRIPT_FILENAME、fastcgi_pass 指向 socket 或 TCP)。五 快速检查清单与示例配置
ps 或 htop 实测 单进程 RSS,并据此计算与验证 pm.max_children。sudo systemctl restart php{version}-fpm(必要时重启 Nginx/Apache)并做 A/B 验证。pm = dynamicpm.max_children = 32pm.start_servers = 5pm.min_spare_servers = 5pm.max_spare_servers = 20pm.max_requests = 1000listen = /run/php/php{version}-fpm.socklisten.owner = www-data;listen.group = www-data;listen.mode = 0660request_terminate_timeout = 30s(长任务建议走队列/异步)slowlog = /var/log/php-fpm/www-slow.logslowlog_timeout = 5scatch_workers_output = yesphp_admin_value[memory_limit] = 128Mphp_admin_value[max_execution_time] = 60sudo systemctl restart php{version}-fpm。