发布于2026-07-10 阅读(0)
扫一扫,手机访问
在 Linux 上跑 PHP-FPM,资源限制这事儿看似不起眼,但真要是踩了坑——文件描述符撑爆、内存锁不住、CPU 飙上天——那排查起来简直让人头秃。好在系统本身提供了好几种成熟的解决方案,从底层到应用层都有招。下面直接说干货,三种主流方法,各位可以根据自己的环境灵活选。

如果你的系统采用 systemd 管理 PHP-FPM 服务(现在大多数主流发行版都是这样),那直接在服务单元文件里加参数就行,干净利落。找到 /etc/systemd/system/php-fpm.service 或 /lib/systemd/system/php-fpm.service,在 [Service] 区块里添加类似这样的配置:
[Service]
...
LimitNOFILE=65535
LimitMEMLOCK=infinity
这里 LimitNOFILE 控制最大文件描述符数量,LimitMEMLOCK 控制可锁定的内存上限。具体数值根据你的业务负载来定,别一刀切。改完之后记得重载配置并重启服务:
sudo systemctl daemon-reload
sudo systemctl restart php-fpm
cgroups 是 Linux 内核自带的“资源隔离武器”,可以精确限制进程组的内存、CPU 等资源。要玩这个,先确保装了 cgroup-tools 包。接着一步步来:
sudo cgcreate -g memory,cpu:/php-fpm
echo "1G" | sudo tee /sys/fs/cgroup/memory/php-fpm/memory.limit_in_bytes
echo "50000" | sudo tee /sys/fs/cgroup/cpu/php-fpm/cpu.cfs_quota_us
echo "100000" | sudo tee /sys/fs/cgroup/cpu/php-fpm/cpu.cfs_period_us
sudo cgclassify -g memory,cpu:/php-fpm
主进程 PID 通常可以在 /usr/sbin/php-fpm 或 /usr/local/sbin/php-fpm 找到,或者直接用 pidof php-fpm 获取。
如果不想动 systemd 和 cgroups,也可以直接在 PHP-FPM 的启动脚本(比如 /etc/init.d/php-fpm 或 /etc/init.d/php7.x-fpm)里设置 ulimit。启动前先把各项限制拉满:
ulimit -n 65535
ulimit -m unlimited
ulimit -l unlimited
ulimit -u 2048
ulimit -T unlimited
这几行分别对应文件描述符数量、内存锁定大小、堆栈大小、用户进程数和 CPU 时间。改完之后重启服务:
sudo service php-fpm restart
需要提醒的是,这三种方法不是互斥的,混用时可能会相互覆盖或冲突。实际项目中建议优先选一种最贴合运维体系的方式,然后做透测试再上线。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8