一、开场:我踩过的那些坑,值200万
大家好,我是老金。
今天这篇文章,我憋了很久。
因为要讲的内容,全是我踩过的坑。
有客户现场的坑,有自己测试时的坑,有半夜被报警叫醒的坑,有差点导致事故的坑。
这些坑加起来,让我损失了:
- 3个通宵
- 2次差点被开除
- 无数根头发
- 大概200万的项目款(客户差点不结账)
但现在,我把这些坑都整理成了50个常见错误和解决方案。
目的只有一个:
让你不踩我踩过的坑。
这篇文章,是OpenClaw故障排查的完全手册。
内容包括:
- 部署阶段常见错误(10个)
- 配置阶段常见错误(10个)
- 运行阶段常见错误(15个)
- 性能问题排查(8个)
- 安全问题排查(7个)
- 通用排障方法论
建议收藏,随时查阅。
二、部署阶段常见错误
❌ 错误1:Docker版本不兼容
错误信息:
ERROR: version '3.8' requires attachable emulated with Docker Desktop
原因:Docker Compose版本与Docker版本不匹配。
解决:
# 检查Docker版本
docker --version
docker-compose --version
升级Docker Compose
sudo apt update sudo apt install docker-compose-plugin
或者单独安装
sudo curl -L “https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
预防:生产环境使用Docker 24+,Docker Compose 2.20+。
❌ 错误2:端口被占用
错误信息:
Error starting userland proxy: listen tcp4 0.0.0.0:18789: bind: address already in use
解决:
# 查找占用端口的进程
sudo lsof -i :18789
# 或
sudo netstat -tlnp | grep 18789
杀掉进程或更换端口
修改 docker-compose.yml
services: openclaw: ports:
- “18790:18789” # 改为18790
❌ 错误3:磁盘空间不足
错误信息:
No space left on device
排查:
# 检查磁盘使用
df -h
查看Docker占用
docker system df
清理
docker system prune -a docker volume prune
预防:生产环境至少预留100GB,监控磁盘使用率,超过80%告警。
❌ 错误4:内存不足(OOM)
错误信息:
Killed process ... out of memory
排查:
# 检查内存
free -h
检查OOM日志
dmesg | grep -i “out of memory” journalctl -k | grep -i memory
解决:
# 增加Swap
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
或限制Docker内存
docker-compose.yml
services: openclaw: deploy: resources: limits: memory: 4G
❌ 错误5:网络隔离问题
症状:容器内无法访问外网。
排查:
# 进入容器测试
docker exec -it openclaw bash
ping 8.8.8.8
curl https://api.openai.com
检查DNS
cat /etc/resolv.conf
解决:
# 修改docker-compose.yml,添加DNS配置
services:
openclaw:
dns:
- 8.8.8.8
- 114.114.114.114
❌ 错误6:数据卷权限问题
错误信息:
Permission denied: '/data'
解决:
# 创建目录并设置权限
sudo mkdir -p /data/openclaw
sudo chown -R 1000:1000 /data/openclaw
docker-compose.yml
services: openclaw: volumes:
- /data/openclaw:/data
❌ 错误7:环境变量未设置
错误信息:
Error: OPENAI_API_KEY is not set
解决:
# 创建.env文件
cat > .env << EOF
OPENAI_API_KEY=sk-xxxx
REDIS_PASSWORD=your_redis_password
EOF
docker-compose.yml
services: openclaw: env_file:
- .env
❌ 错误8:Compose版本不兼容
错误信息:
Version in "./docker-compose.yml" is incompatible
解决:检查并统一Compose版本格式:
# 使用version字段(旧格式)
version: '3.8'
或使用name字段(新格式,推荐)
name: openclaw-project
❌ 错误9:健康检查失败
错误信息:
Container openclaw is unhealthy
排查:
# 查看健康检查日志
docker inspect openclaw | grep -A 20 "Health"
手动测试
curl http://localhost:18789/health
解决:检查配置或增加健康检查超时:
# docker-compose.yml
services:
openclaw:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:18789/health"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
❌ 错误10:多平台构建问题
错误信息:
exec format error
原因:使用了不支持CPU架构的镜像。
解决:
# 检查CPU架构
uname -m
# x86_64 = Intel/AMD
# aarch64 = ARM (Apple Silicon, 树莓派)
使用对应架构的镜像
openclaw/openclaw:latest -> 多架构支持
openclaw/openclaw:amd64 -> 仅Intel
三、配置阶段常见错误
❌ 错误11:YAML格式错误
错误信息:
Error parsing YAML
常见原因:
- 缩进不一致(YAML对缩进敏感)
- Tab vs 空格混用
- 特殊字符未转义(如冒号、井号)
解决:
# 验证YAML语法
pip install pyyaml
python -c "import yaml; yaml.safe_load(open('config.yaml'))"
或使用在线YAML验证器
❌ 错误12:环境变量引用错误
错误信息:
Error resolving variable: VAR_NAME is not defined
原因:引用了未定义的环境变量。
解决:
# config.yaml
llm:
api_key: "${OPENAI_API_KEY}" # 必须设置
或者提供默认值
llm: api_key: “${OPENAI_API_KEY:-default_value}”
检查环境变量
echo $OPENAI_API_KEY env | grep OPENAI
❌ 错误13:LLM API Key错误
错误信息:
AuthenticationError: Invalid API key
排查:
# 检查API Key格式
# OpenAI: sk-xxxx
# Azure: 不同的endpoint和key格式
测试API Key
curl https://api.openai.com/v1/models -H “Authorization: Bearer $OPENAI_API_KEY”
❌ 错误14:超时配置过短
症状:大量请求超时。
原因:timeout设置小于实际响应时间。
解决:
# config.yaml
llm:
request:
timeout: 120 # 增加到120秒
agent: timeout: 600 # Agent执行超时增加到10分钟
❌ 错误15:缓存配置错误
症状:缓存不生效,每次请求都重新计算。
排查:
# 检查Redis连接
docker exec -it redis redis-cli ping
# 应该返回 PONG
检查缓存配置
docker exec -it openclaw openclaw cache status
解决:
# config.yaml
cache:
enabled: true
type: "redis"
redis:
host: "redis" # Docker网络中使用服务名
port: 6379
❌ 错误16:端口映射错误
症状:外部无法访问OpenClaw。
排查:
# 检查端口映射
docker ps | grep openclaw
检查防火墙
sudo iptables -L -n | grep 18789 sudo ufw status
❌ 错误17:跨域配置错误
症状:前端调用报CORS错误。
解决:
# config.yaml
server:
cors:
enabled: true
origins:
- "https://your-domain.com"
- "http://localhost:3000"
methods:
- GET
- POST
headers:
- Content-Type
- Authorization
❌ 错误18:SSL证书配置错误
错误信息:
x509: certificate signed by unknown authority
解决:
# 使用Let's Encrypt证书
# 或在配置中禁用证书验证(仅测试环境)
server:
ssl:
enabled: false # 仅开发环境
生产环境配置证书
server: ssl: enabled: true cert: “/path/to/cert.pem” key: “/path/to/key.pem”
❌ 错误19:数据库连接配置错误
错误信息:
connection refused: database/postgresql:5432
排查:
# 检查数据库服务
docker ps | grep postgres
docker exec -it postgres psql -U postgres -c "SELECT 1"
检查网络连通性
docker exec -it openclaw nc -zv postgres 5432
❌ 错误20:Skill路径配置错误
症状:Skill无法加载,报404错误。
解决:
# config.yaml
skills:
directory: "./skills" # 确保路径正确
auto_reload: true
目录结构
project/ ├── config.yaml └── skills/ ├── web_search/ │ └── skill.yaml └── email/ └── skill.yaml
四、运行阶段常见错误
❌ 错误21:Task执行超时
错误信息:
TaskExecutionError: Task timeout after 300 seconds
排查流程:
- 查看任务日志:
openclaw task logs <task_id> - 检查LLM响应时间
- 检查Skill执行时间
- 检查网络延迟
解决:
# config.yaml
agent:
max_steps: 100 # 增加步数限制
timeout: 600 # 增加超时时间
❌ 错误22:Skill执行失败
错误信息:
SkillExecutionError: web_search failed: Rate limit exceeded
排查:
# 查看Skill状态
openclaw skill list
openclaw skill status web_search
查看Skill日志
docker logs openclaw | grep “web_search”
常见原因:
- API限流
- 参数错误
- 权限不足
- 依赖服务不可用
❌ 错误23:内存泄漏
症状:内存使用持续增长,重启后恢复。
排查:
# 监控内存变化
docker stats
查看OpenClaw内存使用
openclaw metrics | grep memory
Python内存分析(如使用Python版本)
python -m memory_profiler script.py
常见原因:
- 浏览器实例未释放
- 上下文未清理
- 缓存无限增长
- 循环引用
解决:
# config.yaml
browser:
max_instances: 5
auto_cleanup: true
memory_limit_per_instance: "512Mi"
context: max_history: 20 auto_truncate: true
❌ 错误24:CPU持续100%
排查:
# 查看进程
top -c
docker stats
查看OpenClaw内部线程
docker exec -it openclaw ps aux
常见原因:
- 死循环(代码Bug)
- 大量并发请求
- 正则表达式灾难性回溯
❌ 错误25:Agent陷入死循环
症状:同一类型的任务反复执行,无法结束。
解决:
# config.yaml
agent:
max_steps: 50 # 限制最大步数
loop_detection: # 开启循环检测
enabled: true
threshold: 3 # 连续3次相同动作则停止
❌ 错误26:上下文长度超限
错误信息:
ContextLengthExceededError: max tokens exceeded
解决:
# config.yaml
llm:
max_tokens: 4000
context_window: 128000
context: compression: enabled: true strategy: “summary” trigger_length: 50000
❌ 错误27:向量数据库连接失败
错误信息:
VectorStoreError: Failed to connect to Qdrant
排查:
# 检查Qdrant服务
docker ps | grep qdrant
curl http://localhost:6333/collections
检查网络
docker exec -it openclaw nc -zv qdrant 6334
❌ 错误28:文件上传失败
错误信息:
FileUploadError: File size exceeds limit
解决:
# config.yaml
server:
upload:
max_size: "50MB" # 增大限制
allowed_types:
- ".pdf"
- ".txt"
- ".csv"
❌ 错误29:WebSocket连接断开
症状:实时通信频繁断开。
解决:
# config.yaml
server:
websocket:
ping_interval: 30
pong_timeout: 10
max_message_size: "10MB"
Nginx代理配置
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection “upgrade”;
❌ 错误30:日志写入失败
错误信息:
LogWriteError: No space left on device
解决:
# 清理日志
sudo rm -rf /var/log/openclaw/*.log
配置日志轮转
config.yaml
logging: file: max_size: “100M” max_backups: 5 max_age: 7
❌ 错误31-40:更多运行错误(简表)
| 错误码 | 错误类型 | 快速解决 |
|---|---|---|
| 31 | Redis连接超时 | 检查Redis可用性,增加timeout |
| 32 | Skill版本冲突 | 更新或降级Skill版本 |
| 33 | API限流触发 | 增加请求间隔,使用缓存 |
| 34 | 数据库连接池耗尽 | 增加连接池大小,优化查询 |
| 35 | 磁盘IO过高 | 使用SSD,增加内存 |
| 36 | DNS解析失败 | 配置备用DNS服务器 |
| 37 | 证书过期 | 更新SSL证书 |
| 38 | 进程崩溃(OOM Killer) | 增加内存或限制资源 |
| 39 | 信号量耗尽 | 增加系统信号量限制 |
| 40 | 容器被OOMKilled | 增加Docker内存限制 |
五、性能问题排查
❌ 错误41:响应时间慢
排查流程:
- LLM延迟:查看metrics中的llm_latency
- 缓存命中率:查看cache_hit_rate
- 任务队列积压:查看queue_size
- 数据库查询:查看slow_query_log
# 查看OpenClaw metrics
curl http://localhost:9090/metrics | grep -E "(latency|cache|queue)"
慢查询分析
docker exec -it postgres psql -U postgres -c “SELECT * FROM pg_stat_activity WHERE state = ‘active’ AND query_start < now() – interval ‘5 seconds’;”
❌ 错误42:吞吐量低
排查:
# 查看QPS
curl http://localhost:9090/metrics | grep "requests_total"
查看并发数
docker stats
查看Worker状态
openclaw worker list
解决:
# config.yaml
agent:
worker:
min: 5
max: 50
llm: router: enabled: true
❌ 错误43:高并发下崩溃
解决:
# 限流配置
security:
rate_limit:
enabled: true
per_user:
requests_per_minute: 60
global:
requests_per_minute: 1000
熔断配置
circuit_breaker: enabled: true
❌ 错误44-48:更多性能问题(简表)
| 错误码 | 问题 | 解决 |
|---|---|---|
| 44 | 向量检索慢 | 增加向量数据库资源,使用更快的embedding模型 |
| 45 | Embedding延迟高 | 使用本地embedding模型或批量处理 |
| 46 | 缓存未命中率高 | 优化缓存key设计,增加缓存容量 |
| 47 | 网络带宽瓶颈 | 使用CDN,压缩传输内容 |
| 48 | 序列化开销大 | 使用更高效的序列化格式(Protobuf) |
六、安全问题排查
❌ 错误49:未授权访问
症状:任何人都能访问API。
解决:
# config.yaml
security:
api_key_required: true
或配置JWT认证
jwt: enabled: true secret: “${JWT_SECRET}” expiry: 3600
❌ 错误50:敏感信息泄露
排查:
# 检查日志中的敏感信息
grep -E "(password|api_key|token)" /var/log/openclaw/app.log
检查环境变量
env | grep -E “(KEY|SECRET|PASSWORD)”
预防:
# config.yaml
logging:
masking:
- "api_key"
- "password"
- "token"
- "authorization"
❌ 错误51-55:更多安全问题(简表)
| 错误码 | 问题 | 解决 |
|---|---|---|
| 51 | API Key泄露到前端 | 使用服务端代理,隐藏密钥 |
| 52 | XSS攻击 | 输入过滤,输出转义 |
| 53 | CSRF攻击 | 启用CSRF Token |
| 54 | SQL注入 | 使用参数化查询 |
| 55 | 文件上传漏洞 | 限制文件类型,扫描恶意文件 |
| 56 | 权限绕过 | 审核权限配置,使用最小权限原则 |
| 57 | 敏感文件可下载 | 配置Web服务器禁止访问敏感路径 |
七、通用排障方法论
7.1 排障流程
1. 观察现象
↓
2. 收集信息(日志、metrics、错误信息)
↓
3. 定位问题(是哪个组件?)
↓
4. 分析根因(为什么?)
↓
5. 制定解决方案
↓
6. 实施修复
↓
7. 验证修复
↓
8. 记录复盘
7.2 常用命令速查
# 服务状态
docker ps
systemctl status openclaw
日志查看
docker logs -f openclaw tail -f /var/log/openclaw/app.log
Metrics
curl http://localhost:9090/metrics
配置检查
openclaw config validate openclaw config show
健康检查
curl http://localhost:18789/health
进程排查
top -c docker stats lsof -i :18789
7.3 日志分析技巧
# 按级别过滤
grep "ERROR" /var/log/openclaw/app.log
按时间过滤
grep “2026-03-25 10:” /var/log/openclaw/app.log
按Task ID过滤
grep “task_id=abc123” /var/log/openclaw/app.log
上下文查看
grep -A 10 -B 5 “ERROR” /var/log/openclaw/app.log
JSON格式日志解析
cat /var/log/openclaw/app.json | jq ‘. | select(.level==”ERROR”)’
八、写在最后:坑是踩出来的,也是学出来的
这篇文章,汇集了我在OpenClaw上踩过的50个坑。
每个坑,都是一次惨痛的教训。
但正是这些坑,让我对OpenClaw的理解越来越深。
踩坑不可怕,可怕的是踩了同一个坑两次。
所以,我把这些坑整理出来,让你们只踩一次。
希望这篇文章,能帮到你。
如果还有其他问题,欢迎留言。
我们一起,把坑填平。
完。