温馨提示×

ubuntu php-fpm怎样调优

小樊
47
2026-09-07 11:15:43
栏目: 编程语言

在 Ubuntu 上优化 PHP-FPM 通常围绕 进程管理、资源限制、超时、缓存、日志和系统层面 来做。下面按「实用可调优项」给你一个较完整的指南(以 Ubuntu 20.04/22.04 + PHP 7.4/8.x 为例)。


一、找到 PHP-FPM 配置位置

# 查看 PHP 版本
php -v

# 配置目录
/etc/php/{version}/fpm/

# 主配置
/etc/php/{version}/fpm/php-fpm.conf

# 池配置(最常用)
/etc/php/{version}/fpm/pool.d/www.conf

修改后重启:

systemctl restart php{version}-fpm

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

1. 进程模式选择

pm = dynamic

常见模式:

  • static:固定进程数(高并发、内存充足)
  • dynamic:按需伸缩(最常用)
  • ondemand:请求才启动(省内存,但慢)

2. dynamic 模式核心参数(重点)

pm.max_children = 120
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 40
pm.max_requests = 500

如何算 max_children?

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

查看单进程内存:

ps -ylC php-fpm --sort:rss

示例:

  • 服务器 4G
  • 单进程 ~30MB
  • max_children ≈ 4096 / 30 ≈ 120

3. 防止内存泄漏

pm.max_requests = 500

每个子进程处理 500 个请求后重启,避免内存泄漏。


三、超时与执行限制

request_terminate_timeout = 30s
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slow.log
  • request_terminate_timeout:防止脚本卡死
  • slowlog:定位慢接口(非常重要)

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

文件:

/etc/php/{version}/fpm/php.ini

1. 内存限制

memory_limit = 256M

API 服务可小一点(128M),批处理可大。


2. 上传与执行时间

upload_max_filesize = 20M
post_max_size = 20M
max_execution_time = 30
max_input_time = 60

3. 禁用危险函数(安全+性能)

disable_functions = exec,passthru,shell_exec,system

五、OPcache(必须开)

apt install php-{version}-opcache

php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.validate_timestamps=0  ; 生产环境建议关

生产环境 validate_timestamps=0 可显著提升性能(代码变动需重启 FPM)


六、Linux / 系统层优化

1. 文件描述符限制

ulimit -n

PHP-FPM 池配置:

rlimit_files = 65535

系统:

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

2. TCP / Unix Socket 选择

默认:

listen = /run/php/php{version}-fpm.sock

高并发可改 TCP:

listen = 127.0.0.1:9000

Nginx 对应修改:

fastcgi_pass 127.0.0.1:9000;

3. 调整 listen.backlog

listen.backlog = 511

七、Nginx 配合优化(简要)

fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 60;
fastcgi_read_timeout 60;

八、监控与排查工具

# 查看 FPM 状态
pm.status_path = /status

# 启用后访问
http://domain/status

状态页示例:

pool: www
process manager: dynamic
active processes: 12
idle processes: 18

九、典型场景建议

小网站(1–2G)

pm = dynamic
pm.max_children = 30
pm.start_servers = 5
opcache on

高并发 API(4–8G)

pm = static
pm.max_children = 120
opcache + redis

内存极小(512M)

pm = ondemand
pm.max_children = 20

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

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

我可以直接帮你写一份 可复制的 www.conf 配置

0