尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Linux 上跑 Claude Code 服务器宕机避坑:swap 与 config.toml 配置记录

Linux 上跑 Claude Code 服务器宕机避坑:swap 与 config.toml 配置记录 1. 低配 Linux 跑 Claude Code 为什么会把服务器打挂如果你在 2GB 内存的云服务器上跑 Claude Code大概率会遇到一个很典型的现象SSH 突然卡死、top刷不出来、网站 502最后只能去控制台强制重启。这不是 Claude Code 本身有 bug而是它作为一个常驻的 Node 进程在内存吃紧时会把整台机器拖垮。Claude Code 能做什么简单说它是一个跑在终端里的 AI 编码助手能读你项目里的文件、执行命令、改代码。适合谁适合习惯命令行、想把手头项目交给 AI 边聊边改的开发者。但它对运行环境有基本要求Node 运行时、稳定的网络出口、以及足够的内存余量。当这三样里任何一样出问题低配服务器就会先崩为敬。我踩过的坑是这样的一台 2GB 内存的轻量服务器白天挂着 Claude Code 做重构晚上忘了关。第二天发现机器失联控制台一看内存曲线是一条直线顶到天花板。重启后查日志发现进程数从几十涨到了几百全是 Claude Code 派生出来的子进程。核心原因有两个一是网络出口不稳定时客户端会不断重试连接每次重试都可能拉起新的进程或线程旧的没被及时回收二是 2GB 内存本身没有 swap 兜底物理内存一满内核的 OOM Killer 就开始乱杀杀到关键系统进程机器就彻底没响应了。所以这篇记录不讲怎么装 Claude Code而是聚焦两件事怎么用 swap 给内存加一层缓冲怎么用config.toml把资源占用和接入通道固定下来避免它失控。下面给的都是可以直接复制执行的命令和配置骨架。2. 前置准备用 TaoToken 统一 Key 与 API 通道在调 swap 之前先把接入层理顺。Claude Code 默认会直连官方端点如果你的服务器网络出口不稳定重试风暴就是从这里来的。更稳的做法是走一个统一的 API 通道把 Key 和 Base URL 固定下来减少客户端因为鉴权失败或连接超时而反复重试的概率。TaoToken 在这里扮演的角色就是统一入口你拿到一个 Key配好 Base URLClaude Code 的所有请求都走这个通道。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。注意 API 地址后面不加任何查询参数直接填进配置里就行。你需要先拿到 Key。登录后进控制台在 API Keys 页面创建一个新 Key复制出来。这个 Key 后面会写进config.toml所以别贴在聊天窗口里直接存到服务器的环境变量或配置文件里。提示Key 只显示一次创建后立刻保存。如果怀疑泄露直接在控制台删掉重建不要试图找回。拿到 Key 之后先别急着跑 Claude Code用一条 curl 验证通道是否通。这一步能排除掉大部分“连不上导致重试”的问题export TAOTOKEN_API_KEY你的Key curl -sS https://taotoken.net/api/v1/models \ -H Authorization: Bearer ${TAOTOKEN_API_KEY} \ -H Content-Type: application/json | head -c 500如果返回一段 JSON里面有模型列表说明通道正常。如果返回 401检查 Key 有没有复制全如果超时先查服务器 DNS 和出网策略别往下走。3. 可复制配置swap 调整与 config.toml 骨架3.1 先加 4GB swap 兜底2GB 物理内存的机器建议直接加 4GB swap。命令如下逐条执行sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile执行完用free -h确认Swap 那一行应该显示 4.0Gi。然后写入/etc/fstab让它开机自动挂载echo /swapfile none swap sw 0 0 | sudo tee -a /etc/fstab再调两个内核参数让 swap 更积极一点同时降低内存回收的激进程度sudo sysctl vm.swappiness60 sudo sysctl vm.vfs_cache_pressure50 echo vm.swappiness60 | sudo tee -a /etc/sysctl.conf echo vm.vfs_cache_pressure50 | sudo tee -a /etc/sysctl.confvm.swappiness60表示内存用到六成左右就开始往 swap 挪默认值 60 其实够用但有些云镜像默认是 0 或 10那样物理内存满了才会动 swap来不及。vfs_cache_pressure50让内核少回收目录项缓存对文件操作多的场景更友好。3.2 config.toml 骨架Claude Code 的配置文件一般放在~/.config/claude-code/config.toml或项目根目录的.claude/config.toml。下面这份骨架把接入通道、超时和并发都固定住# ~/.config/claude-code/config.toml [api] base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY timeout_seconds 60 max_retries 2 [model] default claude-sonnet-4-20250514 max_tokens 8192 [process] max_concurrent_requests 2 idle_timeout_seconds 300几个关键点解释一下。base_url指向 TaoToken 的 API 地址不带任何多余参数。api_key_env表示从环境变量读 Key不要把 Key 明文写进文件。max_retries 2是重点默认重试次数可能很高网络抖动时会疯狂拉起新请求把它压到 2 次配合 60 秒超时能显著减少进程堆积。max_concurrent_requests 2限制并发低配机器别开太高。把环境变量写进 shell 配置避免每次手动 exportecho export TAOTOKEN_API_KEY你的Key ~/.bashrc source ~/.bashrc3.3 用 systemd 限制资源上限如果你把 Claude Code 做成 systemd 服务加一层资源限制防止它吃光内存[Service] MemoryLimit1G CPUQuota50%执行sudo systemctl edit claude-code.service把上面两行贴进去保存后sudo systemctl daemon-reload sudo systemctl restart claude-code。这样即使它想膨胀也被硬限制在 1GB 内存和 50% CPU 以内OOM Killer 不会去动系统进程。4. 验证请求与成功结果配置改完先做一次最小验证。启动 Claude Code发一条最简单的请求claude -p 用一句话说明当前目录下有几个文件如果配置正确你会看到它返回一句描述同时终端没有卡顿。这时候另开一个 SSH 窗口跑free -h和ps aux | grep -c claude观察内存和进程数。正常情况下内存占用应该在几百 MB 以内进程数稳定在个位数。再验证一下 swap 是否真的在工作。用swapon --show确认/swapfile在列表里类型是 file大小 4G。然后跑一个稍微重一点的任务比如让它读一个中等大小的项目目录claude -p 列出当前项目里所有 .py 文件并统计行数执行过程中用watch -n 1 free -h盯着你会看到 used 内存上升但 swap 那一列也开始有数字说明缓冲层生效了。任务结束后内存会慢慢回落不会出现进程数暴涨的情况。如果你走的是 TaoToken 通道还可以在控制台的用量页面看到这次请求的记录确认请求确实经过了统一入口。这一步能帮你区分“是客户端重试”还是“是通道侧限流”排障时很有用。5. 本篇常见错排查报错一swapon: /swapfile: swapon failed: Invalid argument通常是文件系统不支持或者 fallocate 出来的文件有空洞。改用dd创建sudo dd if/dev/zero of/swapfile bs1M count4096 sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile报错二401 Unauthorized反复出现先确认环境变量有没有生效echo $TAOTOKEN_API_KEY。如果为空说明~/.bashrc没 source或者你用的是 zsh要写进~/.zshrc。另外检查config.toml里api_key_env拼写是否和变量名一致。报错三Claude Code 启动后进程数持续上涨把max_retries降到 1timeout_seconds降到 30再观察。如果还是涨检查是不是有多个 Claude Code 实例同时在跑用pkill -f claude清掉再重启。低配机器上同时开两个实例基本等于自杀。报错四机器还是卡死但 swap 没满这时候看dmesg | tail -50找 OOM Killer 的记录。如果杀的是 node 进程说明 MemoryLimit 没生效检查 systemd 配置有没有正确 reload。如果杀的是 mysql 或 nginx说明你的服务本身内存就紧张Claude Code 只是压垮骆驼的最后一根稻草得先给其他服务做资源隔离。报错五config.toml改了不生效Claude Code 可能读的是项目级配置而不是用户级。确认一下当前目录有没有.claude/config.toml它的优先级更高。用claude config list可以打印当前生效的配置项对照检查。6. 稳定运行的接入与验证入口把 swap、config.toml、systemd 限制这三层配好之后低配 Linux 服务器跑 Claude Code 的稳定性会有明显改善。核心思路就一句话用 swap 兜底物理内存用配置压住重试和并发用统一通道减少网络层的不确定性。如果你还没配 Key或者想换一个更稳的接入通道可以从 API Keys 页面创建一个新 Key然后对照接入文档把base_url和api_key_env填进config.toml。验证模型是否通的时候直接用模型对话发一条短请求看返回是否正常。长期在服务器上跑编码任务的话可以了解一下 Coding Plan把用量和并发规划清楚避免月底才发现额度超了。最后提醒一句生产环境别直接跑 Claude Code哪怕你只是临时改个配置。给它单独开一台低配机器或者至少用 systemd 把资源圈死。真出了 P0重启解决不了根因swap 和配置才是那道防线。
返回列表