<p>Composer报“proc_open(): fork failed - Cannot allocate memory”根本原因是系统缺乏swap空间,free -m显示Swap为0即证实;需用dd创建swapfile、mkswap格式化、swapon启用,并写入fstab实现开机挂载。</p>

为什么 free -m 看不到 Swap 就要手动加
Composer 报 killed 或 proc_open(): fork failed - Cannot allocate memory,往往不是 PHP 内存限制低,而是系统连交换空间(swap)都没有——free -m 输出里 Swap: 行全为 0 就是铁证。Linux 内核在内存严重不足时会触发 OOM killer 杀掉占用内存最多的进程(比如 php),而 swap 是最后一道缓冲。没有 swap,哪怕你把 memory_limit 设成 -1 也白搭。
用 dd + mkswap + swapon 三步建 swapfile
别碰 LVM 或硬盘分区,直接建一个 swapfile 最快最安全。注意路径、权限、挂载顺序:
-
dd if=/dev/zero of=/var/swapfile bs=1M count=2048—— 建 2G 文件;count=3072可扩到 3G,但别超过物理内存 2 倍 -
chmod 600 /var/swapfile—— 必须设为600,否则swapon会因“不安全权限”拒绝 -
mkswap /var/swapfile→swapon /var/swapfile—— 先格式化再启用;若报swapon 失败: 设备或资源忙,先执行swapoff -a清掉已有 swap
验证:运行 free -m,确认 Swap: 行的 total 不再为 0。
让 swapfile 开机自动挂载
临时生效的 swap 在重启后就没了,得写进 /etc/fstab:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 执行
echo "/var/swapfile none swap sw 0 0" >> /etc/fstab - 检查是否重复添加:用
grep swap /etc/fstab确认只有一行 - 测试配置是否合法:
swapon --all --verbose(不会报错即 OK)
注意:swapon --all 会按 fstab 重新加载所有 swap,比单独 swapon /var/swapfile 更可靠。
swap 不是万能的,别忽略 PHP 层限制
swap 解决的是系统级内存分配失败,但 Composer 还可能卡在 PHP 用户态内存耗尽(报 Allowed memory size exhausted)。这两层必须同时处理:
- 优先跑
php -d memory_limit=2G composer install,而不是依赖 swap 后默认跑 - 如果用 CI/CD(如 GitHub Actions),
COMPOSER_MEMORY_LIMIT=2G比改php.ini更干净 - swapfile 占用磁盘空间,长期不用建议
swapoff /var/swapfile && rm /var/swapfile清理
swap 是兜底机制,不是性能优化手段。频繁依赖它,说明项目依赖树太深或环境资源确实紧张——该删 dev 依赖、该升 Composer 版本、该查 autoload 是否扫了 node_modules 或日志目录了。

















