温馨提示×

ubuntu php-fpm怎么优化性能

小樊
40
2026-06-30 23:12:43
栏目: 编程语言

在 Ubuntu 上优化 PHP-FPM 性能,核心目标是:减少进程开销、提高并发能力、避免内存耗尽、减少响应延迟。下面从 配置、系统、代码、监控 四个层面给你一套实用优化方案(适用于高并发或生产环境)。


一、PHP-FPM 关键配置优化(最重要)

配置文件位置(以 PHP 8.x 为例):

/etc/php/8.x/fpm/pool.d/www.conf

1️⃣ 选择合理的进程管理模式(pm)

推荐:pm = dynamic(最常用)或 ondemand(低流量)

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

2️⃣ 进程数量优化(核心)

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

如何计算 pm.max_children

公式:

max_children = 可用内存 / 每个 PHP 进程平均内存

示例:

  • 服务器内存:4GB
  • 每个 PHP 进程:40MB
  • 可用内存:3GB
3000MB / 40MB ≈ 75

✅ 建议留余量,不要跑满内存


3️⃣ 防止内存泄漏

pm.max_requests = 500

✅ 每个子进程处理 500 个请求后自动重启
✅ 强烈建议开启


二、PHP 本身优化

1️⃣ 启用 OPcache(非常重要)

sudo apt install php8.x-opcache

编辑:

/etc/php/8.x/fpm/php.ini

推荐配置:

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

✅ 可提升 30%~100% 性能


2️⃣ 减少不必要的扩展

php -m

禁用未使用扩展,减少内存占用。


三、系统层面优化(Ubuntu)

1️⃣ 文件描述符限制

ulimit -n

如果 < 65535,修改:

/etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

2️⃣ 调整 TCP / 内核参数

/etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
sysctl -p

四、Nginx + PHP-FPM 优化(常见组合)

1️⃣ Nginx 连接优化

worker_processes auto;
worker_connections 10240;
keepalive_timeout 65;

2️⃣ fastcgi 参数

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.x-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;

    fastcgi_buffers 16 16k;
    fastcgi_buffer_size 32k;
}

五、监控与调优工具

1️⃣ 查看 PHP-FPM 状态

pm.status_path = /status

Nginx:

location /status {
    fastcgi_pass unix:/run/php/php8.x-fpm.sock;
    include fastcgi_params;
    allow 127.0.0.1;
    deny all;
}

访问:

curl http://127.0.0.1/status

关注:

  • active processes
  • max children reached

2️⃣ 查看内存占用

ps -ylC php-fpm --sort:rss

六、常见错误 & 建议

pm.max_children 设置过大 → 内存爆掉
validate_timestamps=1 生产环境开启 → 性能下降
❌ 使用 pm = static 但流量不稳定
❌ 没开 OPcache


七、推荐的生产环境模板(4G 内存)

pm = dynamic
pm.max_children = 70
pm.start_servers = 15
pm.min_spare_servers = 10
pm.max_spare_servers = 25
pm.max_requests = 500

如果你愿意,可以告诉我:

  • ✅ Ubuntu 版本
  • ✅ PHP 版本
  • ✅ 服务器内存 & CPU
  • ✅ 是否 Nginx / Apache
  • ✅ 网站类型(Laravel / WordPress / API)

我可以直接给你一套 精准参数配置

0