根本原因是cache/files/的zip包、cache/vcs/的git裸仓库和sys_get_temp_dir()下的临时文件共同耗尽磁盘空间与inode;其中vcs/不被clear-cache清理且单个达300–800mb、含上万小文件,是inode杀手,需禁用cache.vcs false并手动删除,同时清理临时目录。

为什么清完镜像缓存磁盘还是满
根本不是“镜像”本身占空间,而是 cache/files/ 里堆积的 ZIP 包、cache/vcs/ 里的 Git 裸仓库、以及 sys_get_temp_dir() 下残留的临时解压文件三者合力吃掉磁盘和 inodes。尤其当 df -i 显示 inode Use% 接近 100% 时,No space left on device 就和磁盘块无关了。
-
cache/files/:一个laravel/frameworkdist 包 ZIP 就可能超 80 MB,长期积累轻松破 2 GB -
cache/vcs/:默认不被composer clear-cache清理,单个裸仓库 300–800 MB,含上万小文件,是 inode 杀手 -
sys_get_temp_dir():Windows 是C:\Users\用户名\AppData\Local\Temp,Linux/macOS 是/tmp,里面堆着composer_*.zip、php*.phar,最难察觉
如何精准定位并清理真正占空间的目录
别一上来就 composer clear-cache——它只清 files/、repo/、installers/,对 vcs/ 和系统临时目录完全无视。
- 先查真实路径:
composer config --global cache-dir(注意:可能被COMPOSER_CACHE_DIR或公司镜像覆盖) - 看实际占用:
du -sh $(composer config --global cache-dir)(Linux/macOS)或右键 Windows 的%APPDATA%\Composer\Cache属性 - 验证 inode 是否耗尽:
df -i,若 Use% ≥ 95%,优先处理vcs/和sys_get_temp_dir() - 查临时目录真实位置:
php -r "echo sys_get_temp_dir();",再find或资源管理器搜索composer_*
禁用 vcs 缓存比反复清理更治本
cache/vcs/ 是唯一既占大空间又不参与自动 GC 的目录。禁用后所有包强制走 --prefer-dist,跳过 Git 克隆,彻底规避裸仓库。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 执行:
composer config --global cache.vcs false - 立刻清理已有:
rm -rf ~/.composer/cache/vcs/(Linux/macOS)或rd /s /q "%APPDATA%\Composer\Cache\vcs"(Windows) - 副作用:首次
composer update会慢一点(重下 dist 包),但后续更稳,且不再偷偷耗尽 inodes - 注意:杀毒软件或 PhpStorm 可能锁住
vcs/文件,关掉文件索引再删
配置自动回收策略防止缓存回涨
默认 cache-files-ttl 是 180 天,cache-max-size 是 300 MB,但 vcs/ 不受控——清完几天又涨回 2 GB+ 是常态。
- 设 TTL:
composer config --global cache-files-ttl "604800"(7 天,单位秒) - 设上限:
composer config --global cache-max-size "1G"(推荐 500M–1.5G) - 两项必须共存:GC 只清理“已过期且最久未访问”的文件,单设无效
- 验证:
cat $(composer config --global cache-dir)/../config.json | grep -E "(max|ttl)"
真正容易被忽略的是:cache/vcs/ 永远不会响应 cache-files-ttl 或 cache-max-size,它只认 cache.vcs false;而系统临时目录根本不在 Composer 配置管辖范围内,得靠环境变量或手动清理。










