一次离奇的 VSCode CPU 爆红100%排查经历
一次离奇的 VSCode CPU 爆红100%排查经历
一个星号*引发的惨案
问题现象
那天,我像往常一样打开项目准备写代码,却发现 VSCode(后来换 Trae 也一样)突然变得异常卡顿:
Extension Host 进程 CPU 占用飙升到 100%+电脑风扇狂转,像要起飞一样整个编辑器卡死,鼠标都飘了
一开始以为是某个扩展在搞事情,于是开始了常规排查:
操作结果禁用所有扩展❌ 问题依旧重装编辑器❌ 问题依旧安全模式启动❌ 问题依旧
正当我怀疑人生的时候,发现了一个诡异的现象:其他项目完全正常。
这就很有意思了 —— 既然其他项目都好好的,问题一定出在这个项目的某个独特属性上。
排查过程
1. 进程分析
打开系统监视器,看到了惊人的一幕:
Extension Host 居然派生出了 20+ 个 rg --files 进程,每个都在疯狂扫描文件:
rg --files --hidden --case-sensitive --no-require-git --no-ignore-parent --follow --no-config
这些进程的 CPU 累积占用超过 60%,系统直接响应缓慢。
rg 是 ripgrep 的缩写,一个超快的文本搜索工具,VSCode/Trae 用它来索引项目文件。
2. 项目规模检查
我首先怀疑是不是项目太大了?但检查后发现:
$ find . -type f | wc -l
2958
不到 3000 个文件,这个规模绝对不应该导致 CPU 爆炸。
3. 对比分析
项目状态JZJ_theta*❌ CPU 爆炸其他任意项目✅ CPU 正常
既然其他项目都正常,问题一定出在这个项目的某个独特属性上。
4. 真相大白
检查项目路径时,我愣住了:
$ ls ~/
JZJ_theta* # 注意这个星号!
项目名称中包含了 * 字符!
我突然意识到 —— 这个项目是为了测试 Theta* 算法临时创建的,随手打了个 JZJ_theta*,没想到这个星号成了罪魁祸首。
根本原因
VSCode/Trae 内部使用 glob 模式进行文件匹配。路径中的 * 被解释为通配符,导致了一系列连锁反应:
路径包含 *
↓
rg 命令将 * 展开为"匹配所有文件"
↓
触发递归扫描,甚至可能扫描整个文件系统
↓
启动大量并行进程
↓
CPU 爆炸 💥
简单来说:* 在文件路径中是特殊字符,不应该被用作普通文件名。
解决方案
找到问题后,解决就很简单了 —— 重命名项目目录,去掉特殊字符:
mv ~/JZJ_theta* ~/JZJ_theta_star
然后重新打开项目,问题彻底解决。
就这么简单,一个 mv 命令,世界清净了。
经验总结
✅ 项目命名规范建议
推荐不推荐原因my_project_v1my_project_v** 是通配符ros_wsros_ws** 是通配符theta-startheta** 是通配符JZJ_theta_starJZJ_theta** 是通配符
安全字符集:字母、数字、下划线 _、连字符 -、点 .
避免使用的字符:
* ? —— glob 通配符[ ] { } —— 括号扩展| —— 管道符号< > —— 重定向符号$ —— 变量引用! @ # & ( ) 等 —— 各种特殊含义
🔍 类似问题排查思路
如果你也遇到类似的诡异问题,可以按这个顺序排查:
确认问题范围:是单个项目还是所有项目?检查进程:哪些进程在消耗 CPU?(top/htop/htop)对比分析:问题项目 vs 正常项目的差异检查路径:是否包含特殊字符?是否指向系统目录?二分法:禁用扩展、安全模式、重装 → 排除干扰项
📝 向编辑器反馈
这本质上是 VSCode/Trae 的一个 bug —— 路径中的特殊字符应该被正确转义。已向相关团队反馈此问题。
写在最后
有时候,问题不在代码,不在扩展,不在编辑器配置,而在于一个不起眼的星号。
一个简单的重命名,解决了困扰已久的 CPU 爆炸问题。
希望这篇小记能帮助遇到类似问题的开发者。
💡 深有体会
经历了这次事件,我终于明白为什么很多地方对命名有这么多符号限制了。
以前总觉得那些限制太严格,心里还嘀咕:“至于吗?不就是名字而已。”
变量名不能用特殊字符文件名不能包含 *?<>|: 等符号项目名只能字母数字下划线
现在彻底懂了 —— 每一个看似繁琐的限制,背后可能都是血泪教训。
字符在 Shell 中的含义*匹配任意多个字符?匹配单个字符``< >输入/输出重定向&后台运行$变量引用空格参数分隔符
这些字符在编程环境、命令行、文件系统里都有特殊含义。如果允许它们出现在文件名中,就可能被各种工具"误解",引发意想不到的灾难。
命名规范不是束缚,而是保护。
遵守规范,看似多了一分约束,实则少了一分踩坑的风险。
这次一个星号引发的 CPU 爆炸,就是最好的教训。
“The bitterness of poor quality remains long after the sweetness of meeting the schedule has been forgotten.” —— 赶工期的甜蜜早已遗忘,低质量的苦涩却长存。
同理:图一时方便用了特殊字符,后续的坑可能让你哭都哭不出来。