温馨提示×

ubuntu php-fpm怎样优化性能

小樊
50
2026-09-01 11:21:31
栏目: 编程语言

在 Ubuntu 上优化 PHP-FPM 性能,通常从 进程管理、系统资源、PHP 配置、OPcache、内核参数 几个方面入手。下面按实战角度说明。


一、选择合适的 PHP-FPM 进程模式

PHP-FPM 有 3 种 pm 模式:

1. static(稳定高并发)

pm = static
pm.max_children = 100

✅ 适合内存充足、访问量稳定的服务器
❌ 内存占用固定

2. dynamic(常用)

pm = dynamic
pm.max_children = 120
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 40

✅ 内存和性能平衡
✅ 推荐大多数 Web 服务器

3. ondemand(省内存)

pm = ondemand
pm.max_children = 80
pm.process_idle_timeout = 10s

✅ 内存极低
❌ 高并发时延迟明显


二、核心 PHP-FPM 配置优化(www.conf)

路径:

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

推荐优化项

pm = dynamic
pm.max_children = 120
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 40

; 请求上限,防止内存泄漏
pm.max_requests = 500

; 超时控制
request_terminate_timeout = 30s
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slow.log

三、开启并优化 OPcache(非常重要)

安装

sudo apt install php8.1-opcache

配置(php.ini)

opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.validate_timestamps=0   ; 生产环境建议关

⚠️ 改代码后需 reload php-fpm


四、PHP 基础性能优化

memory_limit = 256M
max_execution_time = 30
upload_max_filesize = 20M
post_max_size = 20M
expose_php = Off

五、文件描述符 & 系统限制

1. PHP-FPM 限制

rlimit_files = 65535

2. 系统限制

ulimit -n 65535

/etc/security/limits.conf

* soft nofile 65535
* hard nofile 65535

六、Nginx + PHP-FPM 配合优化

Nginx

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

使用 Unix Socket(比 TCP 快)

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

七、Linux 内核参数优化(高并发)

sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_tw_reuse=1

/etc/sysctl.conf

net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1

八、监控与调优建议

查看 PHP-FPM 状态

pm.status_path = /status

Nginx:

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

观察指标

  • active processes
  • idle processes
  • slow requests

九、常见误区

❌ max_children 设太大 → 内存爆
❌ validate_timestamps=1 生产环境
❌ 使用 TCP 而非 socket
❌ 不监控 slow log


十、简单推荐配置(4核8G)

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

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

  • Ubuntu 版本
  • PHP 版本
  • 服务器配置(CPU/内存)
  • 是否 Nginx / Apache
  • 网站类型(API / 商城 / 博客)

我可以帮你 直接给出一份最优配置。

0 踩