禁用 xdebug 是第一优先级操作,因其会使 composer update 的依赖求解器变慢 5–10 倍;同时需排查循环依赖、宽泛版本约束、缺失 lock 文件等问题。

composer update 导致 CPU 飙升,不是镜像源的问题,换镜像源根本没用。它卡在 Resolving dependencies 阶段,这个阶段完全不走网络,只在本地穷举版本组合——换再快的镜像,也救不了 Solver。
为什么禁用 Xdebug 是第一优先级操作
composer update 的依赖求解器(Solver)本身是 CPU 密集型任务,而 Xdebug 会让它慢 5–10 倍:每个函数调用都触发钩子,把回溯搜索变成“单步调试式”执行。
确认是否启用:php -m | grep xdebug
临时禁用(立刻生效):php -d zend_extension= -d xdebug.mode=off $(which composer) update
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
CI/CD 中务必加前缀,避免开发机配置污染构建环境
别等它跑完再判断——CPU 持续 95%+、内存每秒涨 50MB+、终端只显示一行 Resolving dependencies,就该立刻 Ctrl+C,而不是继续盯着看
如何快速识别是否是循环依赖导致死锁
真正的死锁不是“慢”,而是 Solver 在闭环路径里无限打转:比如myorg/core ← myorg/api ← myorg/core,且两个包的版本约束有交集。
三个关键信号同时出现,基本实锤:
- composer update --dry-run -v 最后几行反复出现同一组包路径(如 a → b → a)
- top 显示 php 进程 CPU 95%+、内存持续暴涨
- composer show -t --no-dev 中某个包在依赖树里出现 ≥3 次,且路径不同
定位闭环命令:composer depends myorg/core --tree(需已有 composer.lock)
输出含 myorg/core ← myorg/api ← myorg/core 就是闭环实锤
注释掉 require-dev 下的重型工具(如 phpstan/phpstan)再试,很多“循环”其实是测试包通过 autoload 引入的假象
宽泛版本约束和缺失 lock 文件会指数级放大求解压力
"^1.0 || ^2.0"、"*"、"dev-main" 或 "minimum-stability": "dev" 都会让 Solver 探索成百上千种组合;没有 composer.lock,composer install 会退化为 update,强制重算整个图。
删掉 composer.json 中的 minimum-stability 字段(默认就是 stable)
确保 composer.lock 已提交进 Git,不要忽略它
检查是否有已下线包残留:删掉 vendor/ 和 composer.lock,再跑 composer install --no-cache
生产部署必须加 --no-dev --classmap-authoritative,跳过 dev 包解析 + 关闭 autoloader 回退扫描
并发下载设置对 CPU 飙升毫无帮助
parallel-downloads 或 http-max-concurrent-downloads 只影响 Installing dependencies 阶段的下载与解压,对 Resolving dependencies 阶段完全无效——它是纯单线程穷举,加核、加并发都没用。
composer config -g repos.packagist.org.concurrent-downloads 2 是为了防镜像限流,不是降 CPU
--with-all-dependencies 或 --ignore-platform-reqs 会绕过缓存,强制全量重算,只会让 CPU 更高
中文 locale(如 LANG=zh_CN.UTF-8)在老旧系统上可能拖慢字符串比较,临时改用 LANG=C composer update 测试
别信“PHP 内存不够导致 CPU 高”——那是 I/O 阻塞被 top 误判,真内存不足会直接报 Allowed memory size exhausted
真正卡住时,最常被忽略的是:它不报错、不退出、不提示,就安静地吃满 CPU —— 这时候你该做的不是等,而是立刻中断,然后查 Xdebug、查循环、查约束。










