Composer本地缓存无LRU机制,cache-files-maxsize仅按文件修改时间清理files/目录,vcs/目录不受控且易耗尽inode;真正影响命中率的是composer.lock一致性与vendor目录复用。

Composer本地缓存没有LRU淘汰机制
Composer本地缓存根本不存在LRU淘汰逻辑——这不是配置没开对,而是设计上就不支持。所谓“缓存写满触发LRU”,是常见误解。真实情况是:cache-files-maxsize设为"500MiB"后,Composer会在每次composer install或composer update结束时,检查~/.composer/cache/files/目录总大小,若超限,则按文件修改时间(mtime)从旧到新逐个删除,直到回落到阈值内。它不记录访问时间,不维护链表,不感知“最近是否被用过”,纯按时间戳硬删。
cache-files-maxsize清理只作用于files/,vcs/目录完全不受控
这个参数只管files/子目录下的.zip/.tar.gz包归档。而vcs/目录里每个Git裸仓库(如github.com/laravel/framework.git/)动辄300–800 MB、含成千上万个文件,占大量inodes,但cache-files-maxsize对其完全无效。执行composer clear-cache默认也不清vcs/——你看到磁盘空间没降、df -i仍报No space left on device,大概率就是vcs/在撑爆inode。
- 手动清理
vcs/前先确认哪些仓库还在用:运行composer show --all | grep "source.*git",提取域名和路径,再比对~/.composer/cache/vcs/里的目录名 - 禁用VCS缓存可一劳永逸:在
composer.json中加"config": {"cache-vcs": false},后续只走dist包,不克隆Git - 临时应急可直接删整个
vcs/:它下次需要时会重建,但首次composer install会变慢
分级告警靠外部工具,Composer自身无通知能力
Composer不会发邮件、不写日志、不触发钩子,更不会在缓存快满时弹警告。所谓“分级告警”,必须靠你自己搭:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS可用
find ~/.composer/cache/files -type f -mtime +180 -delete定期清理半年未更新的包 - 监控脚本应同时查
du -sh $(composer config --global cache-dir)和df -i,前者防空间满,后者防inode耗尽 - Docker CI中建议把
~/.composer/cache挂载为volume,并在before_script里跑du -sh ~/.composer/cache | awk '$1 > 1000 {print "CACHE TOO BIG"}'做阈值拦截
真正影响缓存“有效命中”的是lock文件与vendor复用
别盯着files/大小优化“命中率”。实际构建中,90%的提速来自composer.lock不变+vendor/保留。哪怕files/全空,只要vendor/存在且lock哈希一致,composer install就几乎不下载、不解压、不重写autoload——这才是最省时的“命中”。
- Docker多阶段构建中,用
COPY --from=builder /app/vendor /app/vendor比反复composer install可靠得多 - CI里启用
cache: composer策略时,确保缓存key包含PHP版本、composer.lock哈希、config.platform.php值,缺一不可 -
composer install --no-scripts --no-plugins能跳过部分耗时环节,但别滥用:有些包依赖post-install-cmd生成资源,跳过会导致运行时报错
缓存目录结构松散、淘汰逻辑简单、告警能力缺失——这些不是缺陷,而是Composer刻意为之的设计取舍。它把复杂度交给用户控制,而不是藏在黑盒里假装智能。

















