低配VPS必须手动配swap,因云厂商默认不启用,PHP 8.5.7启动时内存不足会直接被OOM killer杀掉;swap是保命垫而非加速器,1GB内存建议设1–1.5GB,超2GB易损SSD。

swap 不是 PHP 8.5.7 的配置项,而是 Linux 系统级内存管理机制;低配 VPS(比如 1GB 内存)跑 PHP 8.5.7 时,swap 本质是“保命垫”,不是性能加速器——设太小扛不住 FPM 启动或 Composer 加载,设太大反而拖慢响应、磨损 SSD。
为什么低配 VPS 必须手动配 swap?
现代云厂商(如 DigitalOcean、Vultr)默认不启用 swap,哪怕你装了 PHP 8.5.7,php-fpm 启动时若内存不足,会直接被 OOM killer 杀掉,日志里只留 Killed process php-fpm (pid XXX),查不到 PHP 报错。
PHP 8.5.7 单个 FPM 子进程常驻约 40–60MB,pm.max_children = 10 就要 400MB+,加上 Nginx、MySQL(或 SQLite)、系统开销,1GB 机器极易触顶。
swap 大小怎么算?不看教程看实测
- 纯 CLI 场景(无 Web 服务,只跑
composer install或php artisan):设swap为物理内存的 1×(即 1GB),够用且不拖慢 - 带 Nginx + PHP-FPM + SQLite(典型 Laravel 开发站):设
swap为物理内存的 1.5×(即 1.5GB),能扛住高峰请求和 Composer 更新 - 跑 MySQL + PHP-FPM(非容器化):建议改用
zram替代传统swap,否则磁盘 I/O 成瓶颈;实在要用swap,上限 2GB,再多 SSD 寿命锐减 - 绝对不要设
swap> 2GB——低配 VPS 的 SSD 是 QLC 或 eMMC,频繁换页写入半年就掉速/坏块
创建 swap 文件的三步实操(避开 mkswap 权限坑)
不用分区,用文件更安全、可删:
- 创建并限制大小:
sudo fallocate -l 1.5G /swapfile(比dd快十倍,且避免/dev/zero权限问题) - 设权限防泄露:
sudo chmod 600 /swapfile - 启用:
sudo mkswap /swapfile && sudo swapon /swapfile;验证:swapon --show应显示/swapfile和大小 - 开机自启(追加到
/etc/fstab):/swapfile none swap sw 0 0
⚠️ 注意:fallocate 在某些旧内核(如 CentOS 7 默认)不支持,换成 sudo dd if=/dev/zero of=/swapfile bs=1G count=1.5,但速度慢、易卡住。
PHP-FPM 配合 swap 的关键调优点
swap 只是兜底,不能替代合理配置。PHP 8.5.7 下必须同步收紧 FPM 参数:
立即学习“PHP免费学习笔记(深入)”;
-
pm = ondemand:低频访问场景下,空闲时不占内存,首次请求才 fork,比dynamic更省 -
pm.process_idle_timeout = 30s:子进程空闲 30 秒后销毁,避免长期驻留吃光内存 -
pm.max_requests = 200:比默认 500 更激进,防止内存缓慢泄漏累积(PHP 8.5.7 虽修复多处泄漏,但扩展层仍可能出问题) -
request_terminate_timeout = 30s:硬性截断卡死请求,防单个脚本拖垮整机
这些参数加起来,能让 1GB VPS 在有 swap 的前提下,稳定跑一个 Laravel 11 小站或多个静态 API 服务——但别指望它扛住压测,那是另一回事。



















