温馨提示×

ubuntu php-fpm怎么优化

小樊
47
2026-09-22 15:44:49
栏目: 编程语言

在 Ubuntu 上优化 PHP-FPM,通常从 进程管理、资源限制、缓存、系统参数、监控 几个方面入手。下面给你一套实用、可落地的优化方案(适用于生产环境)。


一、找到 PHP-FPM 配置位置

Ubuntu 常见路径:

# 查看 PHP 版本
php -v

# 配置目录(以 8.1 为例)
/etc/php/8.1/fpm/
├── php.ini
└── pool.d/
    └── www.conf

重启命令:

systemctl restart php8.1-fpm

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

编辑:

vim /etc/php/8.1/fpm/pool.d/www.conf

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

推荐 dynamic 或 ondemand

高并发网站(dynamic)

pm = dynamic
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.max_requests = 500

低内存 / API 服务(ondemand)

pm = ondemand
pm.max_children = 50
pm.process_idle_timeout = 10s
pm.max_requests = 500

✅ 经验公式(粗略):

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

查看单进程内存:

ps -ylC php-fpm8.1 --sort:rss

2️⃣ 防止内存泄漏

pm.max_requests = 500

避免长生命周期导致内存上涨。


3️⃣ 用户与权限

user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data

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

vim /etc/php/8.1/fpm/php.ini

1️⃣ 关闭不必要的功能

expose_php = Off
display_errors = Off
log_errors = On

2️⃣ 上传与执行时间

upload_max_filesize = 20M
post_max_size = 20M
max_execution_time = 30
memory_limit = 128M

四、启用 OPcache(强烈推荐)

vim /etc/php/8.1/fpm/php.ini
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.validate_timestamps=0  ; 生产环境

重启 PHP-FPM 后验证:

php -m | grep opcache

五、使用 Unix Socket(比 TCP 快)

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

Nginx 配置:

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

六、系统层面优化

1️⃣ 文件描述符

ulimit -n 65535
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

2️⃣ 内核参数

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

七、监控与调优工具

查看 FPM 状态

pm.status_path = /status

Nginx:

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

访问:

http://yourdomain/status

八、常见优化误区 ❌

❌ max_children 越大越好
❌ 开 validate_timestamps=1 在生产环境
❌ 忽略 pm.max_requests
❌ 使用 TCP 127.0.0.1 而没用 socket


九、推荐生产配置模板(中等服务器)

pm = dynamic
pm.max_children = 80
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.max_requests = 500
listen = /run/php/php8.1-fpm.sock

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

  • ✅ 服务器配置(CPU / 内存)
  • ✅ 网站类型(WordPress / Laravel / API)
  • ✅ 当前并发量

我可以帮你 直接计算一套精准参数。

0 踩