在 Ubuntu 上优化 PHP-FPM 的性能和速度,通常需要从 配置调优、系统资源、PHP 代码、缓存、Web 服务器协同 等方面入手。下面按实用程度给你一套完整方案。
查看当前 PHP 版本和 FPM 状态:
php -v
systemctl status php8.2-fpm # 以 8.2 为例
确认站点使用的是 PHP-FPM 而不是 mod_php(Nginx 必须为 FPM)。
配置文件路径(以 PHP 8.2 为例):
/etc/php/8.2/fpm/pool.d/www.conf
推荐 pm = dynamic 或 pm = ondemand
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
✅ 估算公式(经验值):
pm.max_children ≈ 可用内存(MB) / 每个PHP进程占用内存
查看单个 PHP 进程内存:
ps -ylC php-fpm8.2 --sort:rss
⚠️ 不要设置过大,否则会 OOM。
request_terminate_timeout = 30s
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 5s
用于排查慢 PHP 脚本。
apt install php8.2-opcache
编辑:
/etc/php/8.2/fpm/conf.d/10-opcache.ini
推荐配置:
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=50000
opcache.validate_timestamps=0 # 生产环境
opcache.revalidate_freq=0
✅ 性能提升 30%~300%
php -m
禁用不用的扩展(如 sqlite、pdo_dblib 等)。
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_read_timeout 30;
}
listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data
ulimit -n
如过低,修改:
/etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
swapoff -a
或降低 swappiness:
sysctl vm.swappiness=10
apt install redis-server php8.2-redis
用于:
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=phpcache:100m inactive=60m;
✅ 使用 持久连接(PDO)
✅ 给常用查询加索引
✅ 避免 SELECT *
systemctl restart php8.2-fpm
systemctl restart nginx
| 项目 | 推荐 |
|---|---|
| PHP | 8.2 / 8.3 |
| 进程管理 | dynamic |
| OPcache | ✅ 开启 |
| 缓存 | Redis |
| Web 服务器 | Nginx |
| 静态资源 | Nginx 直接处理 |
ab -n 1000 -c 50 https://example.com/
或:
wrk -t4 -c100 -d30s https://example.com/
如果你愿意,可以告诉我:
我可以给你 一份完全定制的 php-fpm 配置。