温馨提示×

怎么优化Ubuntu PHP-FPM

小樊
51
2026-07-28 01:01:21
栏目: 编程语言

下面从常见场景出发,系统性地讲一下 Ubuntu 下优化 PHP-FPM 的方法,适用于 Laravel / WordPress / 高并发 API 等环境。


一、确认 PHP-FPM 版本与配置位置

1️⃣ 查看 PHP 版本

php -v

常见版本:

  • PHP 7.4
  • PHP 8.1 / 8.2 / 8.3 ✅(推荐)

2️⃣ PHP-FPM 配置文件路径

/etc/php/8.2/fpm/

主要文件:

php.ini                # PHP 参数
pool.d/www.conf        # PHP-FPM 进程池(重点)

二、PHP-FPM 进程池优化(最关键)

1️⃣ 进程管理模式(pm)

推荐:pm = dynamic(通用)

pm = dynamic
模式 适用场景
static 稳定高并发(内存充足)
dynamic ✅ 通用
ondemand 低流量、节省内存

2️⃣ pm 参数优化(重点)

2C4G 服务器为例:

pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

如何计算 max_children

max_children ≈ 可用内存 / 单个 PHP 进程内存

查看单个 PHP 进程内存:

ps -ylC php-fpm --sort:rss

示例:

单进程 60MB
4G 内存,留 1G 给系统
可用 3G ÷ 60MB ≈ 50

不要盲目设置过大


三、请求处理优化

1️⃣ 请求超时

request_terminate_timeout = 30s

防止慢请求卡死进程。


2️⃣ 单进程最大请求数(防内存泄漏)

pm.max_requests = 500

medium 项目推荐:

300 ~ 1000

四、PHP 本身优化(php.ini)

1️⃣ 内存限制

memory_limit = 256M

Laravel / API:

512M

2️⃣ 上传 & 执行时间

upload_max_filesize = 50M
post_max_size = 50M
max_execution_time = 60

3️⃣ OPCache(强烈推荐)

opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0  # 生产环境
opcache.revalidate_freq=0

✅ Laravel / 生产环境必开


五、Nginx + PHP-FPM 优化

1️⃣ Nginx fastcgi 参数

fastcgi_read_timeout 60s;
fastcgi_buffer_size 128k;
fastcgi_buffers 8 128k;

2️⃣ Unix Socket 比 TCP 快

listen = /run/php/php8.2-fpm.sock

Nginx:

fastcgi_pass unix:/run/php/php8.2-fpm.sock;

六、系统层面优化(Ubuntu)

1️⃣ 文件描述符

ulimit -n

建议:

ulimit -n 65535

2️⃣ systemd 限制

systemctl edit php8.2-fpm
[Service]
LimitNOFILE=65535

七、监控 & 排错

1️⃣ 查看 PHP-FPM 状态

systemctl status php8.2-fpm

2️⃣ 开启 status 页面(调试用)

pm.status_path = /status

Nginx:

location /status {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}

八、常见错误 & 解决

❌ 502 Bad Gateway

php-fpm 未启动 / socket 权限错误

修复:

chown www-data:www-data /run/php/php8.2-fpm.sock

❌ 内存耗尽

PHP Fatal error: Allowed memory size exhausted

✅ 增加 memory_limit 或优化代码


九、推荐配置模板(2C4G)

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

十、如果你愿意,我可以:

✅ 根据你的 服务器配置(CPU / 内存) 给你精确参数
✅ 针对 Laravel / WordPress / API 单独优化
✅ 帮你排查 502 / 504 / 高负载问题

直接告诉我:

服务器配置 + 使用场景 + PHP 版本

0