帮助中心 > 关于云服务器 > 云端跑Claude Code:如何配置环境避免SSH断连与OOM?
云端跑Claude Code:如何配置环境避免SSH断连与OOM?
时间 : 2026-11-10 15:38:45
编辑 : Jtti

在本地运行Claude Code,体验流畅。但当你把长任务(如全库重构、批量跑测试)迁移到云端VPS时,两个问题会反复出现:SSH一断,进程就被系统杀死;任务跑到一半,内存耗尽被OOM Killer强制终止。这两件事在云端不是偶发的“小毛病”,而是传统SSH会话和虚拟化资源模型与AI编码负载的结构性冲突。

理解冲突的根源,才能把配置做对。

一、SSH断连:为什么进程会跟着终端一起死?

传统SSH会话绑定在一个终端(TTY)上。Claude Code作为前台进程,其生命周期与这个终端紧密耦合。一旦网络抖动导致SSH连接断开,系统会向该会话下的所有进程发送SIGHUP信号,默认行为是直接终止它们。

这意味着,一个已经运行了半小时、消耗了大量Token的长任务,会因为一次Wi-Fi切换而彻底归零。解决方向不是“保持网络永不中断”,而是让进程脱离终端独立存活。

方案一:tmux——交互式会话的“防断连壳”

如果任务需要你偶尔查看进度、干预提示词,tmux是最合适的选择。它的核心价值是维持一个虚拟终端,独立于任何实际连接的SSH会话。

操作流程很直接。SSH登录VPS后,创建命名会话:

tmux new-s claude_agent

在tmux界面内正常启动Claude Code。需要下班或网络波动时,按下`Ctrl+B`,松开后按`D`(Detach),你会退回到普通命令行,但Claude Code在tmux后台继续运行。下次连上VPS,执行`tmux attach-t claude_agent`即可回到原现场,进度完整保留。

方案二:systemd用户服务——无人值守的常驻方案

如果Claude Code需要完全无人值守地运行(如定时监听队列、自动化执行任务),tmux的“手动挂起/重连”模式就不够用了。此时应将其配置为systemd用户服务。关键细节:必须是用户服务(`systemctl--user`),而不是系统服务。Claude Code需要读取你的家目录和OAuth凭证,以root或系统服务运行会破坏这些依赖。

首先启用linger,确保用户服务在你退出登录后依然存活:

loginctl enable-linger$USER

创建`~/.config/systemd/user/claude.service`,在`[Service]`段中设置`Restart=always`和`RestartSec=10`。这意味着即使Claude Code因偶发错误退出,系统也会在10秒后自动将其拉起。

二、OOM:为什么Claude Code的内存会“失控”?

Claude Code的官方文档明确要求每个会话拥有独立的内存限制。原因在于:当多个会话共享同一个内存上限时,一个会话的内存峰值可能连带杀死其他所有会话,而内核不会按会话粒度决定杀死谁。

GitHub上已有用户报告,单个Claude Code会话的RSS内存可能在8到13分钟内从约300MB持续增长到设定的MemoryMax上限,触发systemd-oomd的终止操作。这不是代码“有bug”,而是AI编码负载的固有特征:上下文持续累积、工具进程常驻、构建和测试步骤会带来瞬时内存峰值。

核心原则:每个会话一个独立的内存上限。

在systemd用户服务中,通过`MemoryMax`为Claude Code划定硬性边界:

ini

[Service]

MemoryMax=8G

MemorySwapMax=5%

`MemoryMax`触发的是cgroup级别的精准终止——内核只杀死该服务内的进程,不会波及宿主机上的其他业务。`MemorySwapMax`的作用同样关键:如果不限制Swap,进程在达到内存上限时会优先使用Swap而不是被杀死,内存上限实际上“失效”了。

如果使用Docker容器运行Claude Code,对应的是`--memory`参数或Compose文件中的`mem_limit`。原则相同:每个容器一个会话,每个会话一个内存上限,所有容器的内存上限之和应低于宿主机总内存,为宿主机自身进程留出余量。

附加保护:限制进程/线程数。Claude Code在构建和测试阶段可能启动大量子进程。如果进程数耗尽,新的命令和构建会返回`EAGAIN`(Resource temporarily unavailable)。在systemd服务中通过`TasksMax`设置上限,或在Docker中使用`--pids-limit`,可以避免这一隐性瓶颈。

三、底层的隐形前提:网络质量决定了“防断连”的上限

tmux和systemd解决了进程层面的存活问题,但它们无法消除网络层面的超时重试。Claude Code的工作模式是高频调用云端API,每一次调用都依赖SSH隧道或直连的长连接。如果VPS的回程线路在晚高峰丢包严重,API请求会反复超时,Claude Code进入重试循环,Token消耗和任务时长都会被拉长。

在云端跑Claude Code,配置的核心不是“把服务启动起来”,而是为它建立一个与终端解耦、与资源上限对齐的运行环境。tmux解决交互式会话的存活,systemd用户服务解决无人值守的常驻,`MemoryMax`配合`MemorySwapMax`解决内存失控,而一条低丢包的CN2 GIA线路,让上述所有配置在真实的网络环境下依然能够兑现。

相关内容

2026年云成本到底贵在哪里?拆解硬件、电力与网络的三重挤压 云服务器数据可靠性主要依赖哪些原理?拆解冗余、隔离、校验与恢复的四层防线 云基础设施全解析:硬件、虚拟化、存储与网络如何协同工作 网络托管类型详解与实测指南:共享、VPS、云与独享,到底怎么选? 托管式主机与非托管式主机:哪种才是您的最佳选择? 网站托管费用:2026年你究竟该付多少钱? 买了高配服务器,上传下载还是慢?影响网络速度的5大真实元凶 小程序服务器配置部署全解析:常见难点、避坑指南与选型建议 美国高防云服务器的防护原理:从流量牵引、多层清洗到纯净回注的完整链路 Linux系统中为单个网络接口分配多个IP地址的方法完整教程
返回

24/7/365 全天候支持我们时刻恭候您

帮助中心