Claude Code 内存泄漏?一行命令救你的 MacBook
TL;DR: 我写了一个开源工具来解决这个问题 → claude-code-cleanup
最近用 Claude Code 和 Codex CLI 的时候,发现一个问题:MacBook 越用越卡,风扇狂转。
打开活动监视器一看,十几个 claude 进程在后台跑,每个占用 60-170MB 内存。有的用户甚至累积到了 30GB。
这不是我的个例。去 GitHub Issues 一查,发现这是个已知的、官方尚未修复的 Bug。
问题有多严重?
我在 Claude Code 和 Codex CLI 的官方仓库里找到了大量相关 Issue:
Claude Code:
#19433—/exit命令不能终止子进程,导致孤儿进程累积#20369— 子代理进程不清理,累积 30GB 内存#11377— 进程消耗 23GB RAM,143% CPU#4953— 进程增长到 120GB+,被 OOM killer 杀死#18859— 空闲 18 小时后每个会话累积约 15GB 内存
Codex CLI:
#7932— 后台进程泄漏,Esc 退出后进程继续运行#9345— 严重内存泄漏
这些 Issue 目前都是 Open 状态。官方还没给出完整的修复方案。
根本原因
问题出在子进程管理上:
主 Claude/Codex 进程(被 /exit 或关闭终端终止)
├── 子进程 1(未收到终止信号 → 变成孤儿)
├── 子进程 2(未收到终止信号 → 变成孤儿)
└── 子进程 N(累积... 每个 60-170MB)
当你关闭 Claude Code 或 Codex CLI 时,主进程终止了,但它的子进程没有被正确清理。这些孤儿进程的父进程 ID (PPID) 变成 1,继续在后台运行、占用内存。
解决方案
既然官方还没修,我们就自己动手。
我写了一个完整的清理工具,开源在 GitHub:claude-code-cleanup
包含:
ccclean.sh— 带交互式界面的完整清理脚本- Claude Code Skill — 支持
/ccclean命令
下面是几种不同复杂度的解决方案。
方案 1:手动清理(立即见效)
# 查看有多少孤儿 Claude 进程
ps aux | grep '[c]laude' | awk '$7 == "??" {print $2}' | wc -l
# 杀死所有孤儿进程
ps aux | grep '[c]laude' | awk '$7 == "??" {print $2}' | xargs kill -9 2>/dev/null
# 或者简单粗暴:杀死所有 Claude 相关进程
pkill -f claude
# Codex CLI 同理
pkill -f codex
方案 2:添加快捷命令
在 ~/.zshrc 或 ~/.bashrc 中添加:
alias claude-cleanup='ps aux | grep "[c]laude" | awk "\$7 == \"??\" {print \$2}" | xargs kill -9 2>/dev/null && echo "✅ Claude 孤儿进程已清理"'
之后只需运行 claude-cleanup 即可。
方案 3:自动定时清理
如果你经常忘记手动清理,可以设置一个每小时自动执行的守护程序:
cat > ~/Library/LaunchAgents/com.user.claude-cleanup.plist << 'PLIST'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.claude-cleanup</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>ps aux | grep '[c]laude' | awk '$7 == "??" {print $2}' | xargs kill -9 2>/dev/null || true</string>
</array>
<key>StartInterval</key>
<integer>3600</integer>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
PLIST
# 加载守护程序
launchctl load ~/Library/LaunchAgents/com.user.claude-cleanup.plist
管理命令:
# 查看状态
launchctl list | grep claude-cleanup
# 手动触发一次清理
launchctl start com.user.claude-cleanup
# 不想用了?卸载它
launchctl unload ~/Library/LaunchAgents/com.user.claude-cleanup.plist
rm ~/Library/LaunchAgents/com.user.claude-cleanup.plist
方案 4:完整清理脚本(推荐)
如果你想要更安全、更完整的解决方案,可以使用我写的 ccclean.sh 脚本:
# 下载
curl -O https://raw.githubusercontent.com/YuancFeng/claude-code-cleanup/main/ccclean.sh
chmod +x ccclean.sh
# 运行
./ccclean.sh
这个脚本的安全特性:
- 精确匹配:只清理进程名完全为
claude的进程,不会误杀其他程序 - PID 复用保护:清理前验证进程启动时间,防止误杀新进程
- 运行时长保护:跳过运行少于 5 分钟的进程
- 双重确认:列出所有候选进程,让你选择后再次确认
- 优雅终止:先发送 SIGTERM,等待后才发送 SIGKILL
日常使用建议
在官方修复之前,这些习惯可以帮你减少问题:
| 建议 | 说明 |
|---|---|
| 每 30-45 分钟重启一次 | 设个定时器,避免内存无限累积 |
多用 /clear 命令 | 清理上下文,减少内存占用 |
关闭时用 /exit | 虽然也有问题,但比直接关终端好一点 |
| 避免长时间空闲 | 空闲会话也会泄漏内存 |
总结
| 问题 | 答案 |
|---|---|
| 这是已知问题吗? | 是,官方 GitHub 有大量相关 Issue |
| 官方修复了吗? | 尚未完全修复 |
| 有解决方案吗? | 有,见上面的手动/自动清理方法 |
Claude Code 是个很强的工具,但这个内存泄漏问题确实影响体验。希望官方能尽快修复。
在此之前,claude-cleanup 命令就是你的好朋友。
开源工具
我把完整的解决方案开源在了 GitHub:
包含两个工具:
ccclean.sh— 独立的 bash 脚本,带交互式界面,可以直接下载运行- Claude Code Skill — 如果你也在用 Claude Code,可以把
skill/SKILL.md复制到你的 skills 目录,然后直接用/ccclean命令清理
欢迎 Star 和提 Issue。