指南/Claude Code占用内存过多
Claude Code在Mac上占用内存或CPU过多?如何找出来,并把资源拿回来
简要回答
Claude Code在终端里运行,进程名为claude,工作时还会启动别的进程:MCP服务器、子代理,以及用来检查成果的开发服务器和测试。有两件事会让它变重。运行了好几个小时的会话,内存和CPU占用可能越来越高;退出后用claude --resume恢复,它就回到正常水平。另外,它启动的进程在会话结束后可能仍在运行。在活动监视器中搜索claude、node和mcp就能找到它们。Vitals是一款Mac系统监控工具,会列出在每个项目文件夹中工作的所有进程,会话留下了什么一目了然。
如何找出Claude Code占用了什么
- 01 打开活动监视器,点按“内存”,在搜索栏中输入claude。每个正在运行的会话占一行。占用好几GB的,或者你没让它做事却在忙的那一行,就是该重启的。
- 02 选取“显示”→“所有进程,分层显示”。点开终端App旁边的三角形,就能看到每个会话,以及排在它下面、由它启动的所有东西。
- 03 重启占用很高的会话:按两次Control-C退出,然后在同一个文件夹中运行
claude --resume并选择那段对话。它会从停下的地方接着进行。 - 04 清空搜索栏,先搜索mcp,再搜索node。关掉所有Claude Code会话后仍然在的那些行,就是被留下的。
- 05 在“终端”中,
ps -axo pid,ppid,rss,etime,command | grep -i mcp会列出它们以及各自的父进程。父进程为1,表示启动这个进程的会话已经不在了。用kill加上它的编号可以停止它。
在Claude Code中,/mcp会列出会话启动的MCP服务器。每个都是独立的进程;把不用的移除。
Claude Code是命令行程序,所以没有自己的窗口,程序坞里也没有它:它的开销会算在你的终端App名下,或者算在你用其终端运行它的编辑器名下。它还是一个会启动其他程序的程序。每个MCP服务器是一个进程,每个子代理是一个进程;它运行你的测试或启动你的开发服务器时,那些也都是进程。人们算到Claude Code头上的内存,大部分其实在它启动的东西里。下表帮你分清哪个是哪个。
Claude Code的内存和CPU用在了哪里
| 你看到的现象 | 它是什么 | 怎么做 |
|---|---|---|
claude占用好几GB | 开了好几个小时的会话 | 退出后运行claude --resume |
claude闲置时也在忙 | 同上:会话开久了会变慢 | 重启会话;更新Claude Code |
很多node进程 | MCP服务器,每个会话里每个服务器一个 | 用/mcp移除不用的服务器 |
| 所有会话都关闭后仍留着的进程 | 没有停止的MCP服务器、子代理或无头浏览器 | 按父进程为1找出它们,然后退出 |
next-server、测试运行器或构建占用CPU过高 | Claude Code为检查成果而启动的东西 | 停止它,或让Claude Code来停 |
会话开久了会变大
会话会保留整段对话、读过的每个文件和每条命令的输出。几个小时下来就积少成多;在Claude Code的问题跟踪页上,有人反映会话涨到了很多GB,或者闲置时也让一个CPU核心一直忙。这些反映给出的解决方法是一致的:退出会话,再恢复它。对话是边进行边保存的,所以claude --resume什么都不会丢,而且是从一个干净的进程重新开始。
及时更新Claude Code比大多数工具都更要紧。它更新得很勤,内存问题正是各个版本之间会修复的问题之一。claude update可以更新它。
会话留下了什么
会话结束时,它启动的进程本该跟着结束。但并不总是这样。MCP服务器、子代理或无头浏览器可能失去父进程后继续运行,占着内存却没有任何东西在用它。有位开发者写文章说,工作一天后他数出37个这样的进程,占了6 GB以上。
只要去看,它们很好认:没有终端、父进程为1、启动时间是几个小时前。退出它们是安全的。严格来说,僵尸进程是另一回事:它已经结束,不占内存。人们在这里说的僵尸其实是孤儿进程,还活着,还占着内存。
开发服务器、测试和构建
为了检查成果,Claude Code会启动你的开发服务器、运行你的测试或构建项目。它在后台启动的开发服务器,任务完成后仍在提供服务;如果没有东西去停止它,会话关闭后也一样。两三个项目各有一个被忘掉的开发服务器,是内存充裕的Mac也会不够用的常见原因。
结束会话前,让Claude Code把它启动的东西停掉,或者查看有哪些端口正在被监听:开在你不用的端口上的服务器,就是没人在用的服务器。
同时开好几个会话
并行运行代理,每个任务或每个分支一个,会把上面的一切成倍放大:每个会话有自己的内存、自己的一份MCP服务器和自己的开发服务器。在16 GB的Mac上,这就是宽裕与内存压力变黄之间的差别。关闭已经完成的会话,并给各个服务器分配不同的端口,免得第二个悄悄失败又不断重试。
Vitals能多做什么
Vitals会显示每个项目的开销,包括那些不属于任何窗口的进程。
- “项目”标签页:在某个项目文件夹中工作的所有进程,不管是哪个终端或编辑器启动的,附上整个项目的内存、CPU和能耗
- 每个项目正在监听的端口。闲置着没关的开发服务器会被指出,并可让你停止它们
- Claude Code更新前后都算作同一个工具,所以它一天的内存是一条线
- 某个App内存不断增长或连续几分钟占用CPU时发送通知
- 在菜单栏中即可退出任何App,退出前会先询问
须知
- Vitals显示的是进程以及它们的占用。它不会读取Claude Code的对话,也不知道某个会话在做什么。
- Vitals绝不会自行退出任何东西。
常见问题
Claude Code为什么占用这么多内存?
开了好几个小时的会话会变大,而且它启动的每个MCP服务器、子代理和开发服务器都是独立的进程。退出会话并运行claude --resume,从一个干净的进程接着进行。
重启Claude Code会丢失对话吗?
不会。对话是边进行边保存的。在同一个文件夹中运行claude --resume,选择那段对话就能继续。
用Claude Code时为什么有这么多node进程?
大多数是MCP服务器:每个服务器作为独立的进程运行,每个会话各一份。在Claude Code中,/mcp会显示配置了哪些。
如何找出Claude Code留下来没关的进程?
关闭所有会话,然后在活动监视器中搜索mcp和node。在“终端”中,ps -axo pid,ppid,rss,command会显示每个进程的父进程;父进程为1表示它是被留下的。
退出遗留的MCP服务器进程安全吗?
安全,只要没有打开任何Claude Code会话。会话下次运行时会重新启动它需要的服务器。
Claude Code需要多少内存?
新开的会话占用几百MB。其余取决于它启动了什么:MCP服务器、开发服务器、一次测试。并行开几个会话,全都会成倍增加。
有没有能显示Claude Code在Mac上运行了什么的App?
Vitals有一个“项目”标签页,会列出在每个项目文件夹中工作的所有进程,附上内存、CPU和端口,并指出闲置着没关的开发服务器。