在 Ubuntu 上 php-fpm 占用 CPU / 内存很高,通常不是 php-fpm 本身“坏了”,而是请求量、代码、配置或外部依赖导致的。下面按最常见原因 → 排查方法 → 解决思路给你一个系统性的说明。
file_get_contents()、glob()、正则✅ 表现:
✅ 表现:
pm = dynamic 下 active processes 很快打满典型问题:
pm.max_children 设太大 → 内存爆request_terminate_timeout 没设 → 慢请求堆积✅ 表现:
Idle 但数量很多systemctl status php8.1-fpm
或:
ps aux | grep php-fpm
看:
编辑 pool 配置:
/etc/php/8.1/fpm/pool.d/www.conf
启用:
pm.status_path = /status
Nginx:
location = /status {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
include fastcgi_params;
}
访问:
/status?full
重点看:
active processesslow requestsrequest durationslowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 2s
然后:
tail -f /var/log/php-fpm/slow.log
能直接看到哪行 PHP 代码慢
htop
或
iftop
opcache.enable=1
opcache.memory_consumption=128
示例(2G 内存服务器):
pm = dynamic
pm.max_children = 30
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
request_terminate_timeout = 30s
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
Ubuntu 上 php-fpm 占用高,90% 是“慢 PHP 请求 + 进程堆积”造成的,不是 php-fpm 本身的问题。
如果你愿意,可以直接把下面信息发我,我可以帮你精准判断:
pm 配置top 或 htop 截图我可以一步一步帮你定位到具体哪一行代码或哪个接口在吃资源。