指南/Claude Code占用内存过多

Claude Code在Mac上占用内存或CPU过多?如何找出来,并把资源拿回来

Atta 🐬

Vitals创始人

发布于

简要回答

Claude Code在终端里运行,进程名为claude,工作时还会启动别的进程:MCP服务器、子代理,以及用来检查成果的开发服务器和测试。有两件事会让它变重。运行了好几个小时的会话,内存和CPU占用可能越来越高;退出后用claude --resume恢复,它就回到正常水平。另外,它启动的进程在会话结束后可能仍在运行。在活动监视器中搜索claude、node和mcp就能找到它们。Vitals是一款Mac系统监控工具,会列出在每个项目文件夹中工作的所有进程,会话留下了什么一目了然。

如何找出Claude Code占用了什么

  1. 01 打开活动监视器,点按“内存”,在搜索栏中输入claude。每个正在运行的会话占一行。占用好几GB的,或者你没让它做事却在忙的那一行,就是该重启的。
  2. 02 选取“显示”→“所有进程,分层显示”。点开终端App旁边的三角形,就能看到每个会话,以及排在它下面、由它启动的所有东西。
  3. 03 重启占用很高的会话:按两次Control-C退出,然后在同一个文件夹中运行claude --resume并选择那段对话。它会从停下的地方接着进行。
  4. 04 清空搜索栏,先搜索mcp,再搜索node。关掉所有Claude Code会话后仍然在的那些行,就是被留下的。
  5. 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绝不会自行退出任何东西。
购买Vitals $9 首发期$9,之后$29。14天内可退款。

常见问题

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和端口,并指出闲置着没关的开发服务器。

术语表中的相关条目

更多指南