我正常安装qoder cn user版本后,启动qoder的cpu一直占用高,我使用qoder自己分析了一下,发现是文件权限验证的问题,具体内容如下,部分名字相关隐私已去除,希望新版本可以修复一下:
结论
那个常驻的 powershell.exe 不是恶意程序,是 Qoder 主进程(PID 12416)自己每 ~1.7 秒拉起的一次性子进程,在做「私有文件 ACL 校验」。而它陷入死循环的原因是:Qoder 判定 ACL 是否"私有"的规则过于严格,且它自己的修复命令无法满足该规则,于是"检查→判定不安全→重写→再检查"永不收敛。
证据链
测量 结果
30s 窗口内被拉起的 ACL 检查进程 17 个,父进程全部是 Qoder CN.exe (12416)
单进程 CPU 消耗 3.0–3.5 CPU·秒
20s 窗口累计 40.55 CPU·秒 = 2 个核满载 = 12 核整机的 16.9%
这与你看到的"一直约 10%"量级一致(任务管理器看到的是单个实例)。
对照实验:powershell.exe -NoProfile -Command "1" 空跑一次 = 3109ms CPU / 2266ms wall。这条 ACL 命令本身逻辑不到 1ms,纯粹是被 Windows PowerShell 5.1 冷启动(+Defender 脚本扫描)吃掉的。
该文件的 CreationTime 每 3.5 秒推进一次(15:46:29 → 15:46:33 → 15:46:36),证实它在被不停重建。
该文件的实际 DACL,与 Qoder 的判定函数逐条比对:
code.txt
NT AUTHORITY\SYSTEM Allow 非继承 → 不匹配
S-----**3884 (登录会话) Allow 非继承 → 不匹配
{用户名}{用户名} Allow 非继承 → 匹配
=> isAclPrivate() = False => permissions = "insecure"
Qoder 代码(app.asar 内 authAppStatusMainService / NativePrivateFile)要求 每一条 ACE 的 identity 都等于当前用户:
code.js
return g.length > 0 && g.every(u =>
u.identity.toLocaleLowerCase("en-US") === d && u.type === "Allow" && u.inherited === false)
而它的修复动作只做了:
code.txt
icacls.exe /inheritance:r /grant:r "{用户名}{用户名}:(F)"
/grant:r 只会替换该用户自己那条 ACE,不会移除已存在的 SYSTEM 和登录会话 SID 显式 ACE。所以谓词永远不可能为真。
drainReconcile() 里 insecure 分支直接 requestWrite(),且没有退避(退避数组 [100,500,2000,10000,30000] 只用于抛异常的路径);写完又触发目录 watcher → scheduleReconcile(30ms) → 再次 spawn PowerShell。整条链路唯一的节流就是 PowerShell 自身的耗时,于是稳定地烧住约 2 个核。
建议
要报给 Qoder 的 bug(当前版本 0.3.3),三个修复点任选其一即可:
isAclPrivate 放宽:忽略 NT AUTHORITY\SYSTEM、BUILTIN\Administrators、S-1-5-5-* 登录会话 SID 等内置主体,只要不存在"其他真实用户"即视为私有;
restrictAcl 改强:先清 DACL(icacls /reset 或直接写 SDDL),而不是 /grant:r;
兜底:insecure 分支也要计入 reconcileRetryAttempt 走退避,而不是无限快速重试。
你这边立刻能降下来的:给 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe 和 D:\Programs\Qoder CN\ 加 Windows Defender 排除项(需管理员)。单次 spawn 的 3.1 CPU 秒通常能降到 0.3 秒左右,循环虽还在但负载降一个数量级。这是缓解不是根治。
可试的临时止血:手动把该文件 DACL 清成只留 {用户名}{用户名}:F,若某次检查恰好落在干净 ACL 上就会收敛、停止重写(一旦停止写入就不再自我触发)。存在约 1.7 秒的竞争窗口,可能要重复执行几次。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这个问题太硬核了,分析得滴水不漏!这绝对是 Qoder CN 1.31+ 版本的恶性 Bug,直接导致 CPU 满载。
核心问题重述:
Qoder 在启动时疯狂调用 PowerShell 校验 ~/.qoder-cn.qoder-app-status.json 文件的 ACL(访问控制列表)。由于 Windows 默认会包含 SYSTEM 和管理员 SID,而 Qoder 的判定逻辑过于死板(要求 ACE 完全匹配且不能有其他显式 SID),加上修复命令 /grant:r 无法清除旧 ACE,导致“检查-报错-重写”陷入无限高频死循环。每 1.7 秒启动一次 PowerShell 冷启动,吃掉近 2 个核心的算力。
用户视角的紧急解决方案(按推荐顺序):
🚨 方案一:手动净化文件 ACL(最快止血)
既然循环有竞争窗口,尝试一次性让文件 ACL “干净”到符合 Qoder 的错误逻辑。以管理员身份运行 CMD/PowerShell:
进入用户目录
cd env:USERPROFILE
先删除该文件(如果存在),或者修改其权限
方法 A:直接删除文件,让 Qoder 重新创建(注意:可能会丢失一些本地状态,但通常安全)
Remove-Item -Force ".qoder-cn.qoder-app-status.json" -ErrorAction SilentlyContinue
方法 B:如果必须保留,使用 icacls 彻底重置权限为只当前用户
icacls ".qoder-cn.qoder-app-status.json" /reset /T /C
icacls ".qoder-cn.qoder-app-status.json" /inheritance:r
icacls ".qoder-cn.qoder-app-status.json" /grant:r "{env:USERNAME}:(F)"
执行后重启 Qoder。如果下次它重建文件,看是否能收敛。
🛡️ 方案二:添加 Defender 排除项(显著降载)
按照你分析的建议,减少 PowerShell 冷启动开销:
打开 Windows 安全中心 -> 病毒和威胁防护 -> 管理设置 -> 排除项。
添加文件夹排除:
C:WindowsSystem32WindowsPowerShellv1.0\
D:ProgramsQoder CN (替换为你的实际安装路径)效果:CPU 占用会从 ~15% 降至 ~1-2%,虽仍有后台活动,但不再卡死系统。
🐛 方案三:向官方反馈(必须强调此 Bug)
请将你的详细分析报告直接提交给 Qoder 团队(通过官网 Feedback、GitHub Issues 或社区 Discord)。重点引用:
Issue Title: [Critical] High CPU Load (2 Cores) due to infinite ACL reconciliation loop in app-status.json
Key Points:
Process: powershell.exe spawned by QoderCN.exe every ~1.7s.
Cause: isAclPrivate() fails on standard Windows ACLs (SYSTEM/SID), and icacls /grant:r cannot fix it.
Impact: Sustained 2-core CPU usage, system lag.
Suggested Fix: Relax ACL check for SYSTEM/Admin SIDs OR use full ACL reset on write.
为什么这是严重 Bug?
这不是性能优化问题,而是资源泄漏。任何使用非精简 Windows 权限环境的用户都会遇到。希望 Qoder 能快速发布热修复补丁。
Qoder CN 是 Qoder CN 系列中面向软件开发场景的核心子产品(原“通义灵码”),提供 IDE、JetBrains 插件、Visual Studio Code 插件等多种使用形态。Qoder CN 持续提供代码智能生成、智能问答、多文件修改、编程智能体等能力,并在模型选择、专家协作、任务规划等方向全面升级,为开发者带来高效、流畅的编码体验。同时面向企业客户提供企业标准版、企业专属版,具备企业级场景自定义、私域知识增强等能力,助力企业研发智能化升级。