温馨提示×

ubuntu php-fpm为何响应缓慢

小樊
49
2026-09-01 11:28:25
栏目: 编程语言

在 Ubuntu 上 PHP-FPM 响应缓慢 通常是配置、资源、或上下游依赖的问题。下面按最常见原因 → 排查方法 → 解决建议来说明。


一、最常见原因(90% 情况)

1. PHP-FPM 进程数不足(最常见)

当并发请求超过 pm.max_children 时,请求会排队

表现

  • 请求偶尔很慢
  • load 不高,但响应时间长
  • Nginx 报 upstream timed out

排查

sudo tail -f /var/log/php*/fpm.log

看到:

server reached pm.max_children

解决

sudo vim /etc/php/*/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

然后:

sudo systemctl restart php-fpm

2. Nginx 与 PHP-FPM 通信慢

使用 tcpunix socket 配置不当。

推荐(更快)

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

检查

ls -l /run/php/

3. PHP 代码本身慢

  • 死循环
  • 大量 file_get_contents
  • 未使用缓存

排查

sudo apt install php-xdebug

或简单加:

echo microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'];

4. 数据库慢(MySQL / PostgreSQL)

PHP 很快,但 SQL 很慢。

排查

SHOW PROCESSLIST;

或开启慢查询日志。


5. DNS 解析卡住(经典坑)

PHP 中:

  • mail()
  • gethostbyname()
  • 外部 API 请求

解决

  • 使用 IP
  • 设置 timeout
  • 禁用 mail()

二、系统层面原因

6. 磁盘 IO 慢

iostat -x 1

iotop

7. 内存不足导致 swap

free -h

如果 swap 很高:

  • 增加内存
  • 减少 pm.max_children

8. CPU 被占满

top
htop

三、PHP-FPM 配置建议(通用)

request_terminate_timeout = 30s
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm-slow.log

查看慢日志:

tail -f /var/log/php-fpm-slow.log

四、快速自查清单 ✅

  • [ ] pm.max_children 是否太小
  • [ ] 是否开启 slowlog
  • [ ] 数据库是否慢
  • [ ] 是否有外部 HTTP 请求
  • [ ] 是否使用 opcache
  • [ ] Nginx 是否正确连接 PHP-FPM

五、强烈建议开启 OPCache

sudo apt install php-opcache
opcache.enable=1
opcache.memory_consumption=128

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

  • PHP 版本
  • Nginx 还是 Apache
  • 是否 WordPress / Laravel
  • 慢的具体场景(首页?接口?)

我可以直接帮你给出精准配置

0