温馨提示×

ubuntu php fpm为何响应缓慢

小樊
41
2026-09-04 13:08:38
栏目: 编程语言

在 Ubuntu 上 PHP-FPM 响应缓慢通常是配置、资源、或上游依赖的问题。下面按「最常见 → 较少见」的顺序帮你系统排查。


一、最常见原因(80% 问题在这里)

1. PHP-FPM 进程数不够(最典型)

PHP-FPM 默认进程很少,并发一高就排队。

查看:

ps aux | grep php-fpm

检查配置文件(通常在):

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

关键参数:

pm = dynamic
pm.max_children = 5        # 太小
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

建议(示例,4 核 8G)

pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

修改后:

systemctl restart php8.x-fpm

2. 请求被 Nginx 卡住(不是 PHP 慢)

Nginx 配置不当也会导致“看起来 PHP 慢”。

检查:

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

确保:

  • socket 存在
  • Nginx 用户有访问权限

测试:

curl -w "%{time_total}\n" http://localhost/test.php

3. PHP 代码本身慢

排除法:

<?php
phpinfo();

如果这个很快 → 业务代码问题

常见问题:

  • 循环里查数据库
  • 未加索引的 SQL
  • file_get_contents() 外部请求
  • 大量日志写入

二、数据库导致的慢(非常常见)

MySQL 慢查询

SHOW PROCESSLIST;

或开启慢查询日志:

slow_query_log = 1
long_query_time = 1

典型原因

  • 没索引
  • 一次查几万条
  • 事务未提交

三、系统资源问题

1. CPU / 内存不足

top
htop
free -h

如果:

  • CPU 100%
  • 内存爆 + swap

→ PHP-FPM 会被拖死


2. 磁盘 IO 慢(云服务器常见)

iostat -x 1

如果 %util 接近 100%:

  • 日志写太多
  • session 文件过多

四、PHP-FPM 配置误区

1. request_terminate_timeout 太小

request_terminate_timeout = 30s

如果业务慢,会被杀掉并重连,感觉“更慢”。


2. opcache 没开(性能差 2–5 倍)

php -m | grep opcache

开启:

opcache.enable=1
opcache.memory_consumption=128
opcache.revalidate_freq=60

五、Session 问题(容易被忽略)

文件 session 太多

ls /var/lib/php/sessions | wc -l

解决:

  • 用 Redis 存 session
  • 定期清理

六、快速自检清单 ✅

你可以依次确认:

  • [ ] pm.max_children 是否太小
  • [ ] Nginx 是否正常转发
  • [ ] 数据库是否慢
  • [ ] opcache 是否开启
  • [ ] 是否是某段 PHP 代码慢
  • [ ] 系统 CPU / 内存 / IO 是否正常

如果你愿意,可以把下面信息发我,我可以直接帮你定位:

  1. Ubuntu 版本
  2. PHP 版本
  3. www.conf 的 pm 配置
  4. 偶发慢 还是 一直慢
  5. 是否有数据库

我可以给你一套精确优化方案

0