CroupierCroupier
指南
架构
API 参考
  • C++ SDK
  • Go SDK
  • Java SDK
  • JavaScript SDK
  • Python SDK
  • C# SDK
  • Lua SDK
分析
GitHub
指南
架构
API 参考
  • C++ SDK
  • Go SDK
  • Java SDK
  • JavaScript SDK
  • Python SDK
  • C# SDK
  • Lua SDK
分析
GitHub
  • 入门指南

    • 首页
    • 新手教程
    • 快速开始
    • 安装指南
    • 配置管理
    • 部署指南
    • 常见问题
  • 核心概念

    • 系统概览
    • 虚拟对象系统
    • 函数管理
    • 权限控制
  • 运维指南

    • 监控指南
    • 安全配置
    • 故障排查

故障排查指南

本文档介绍 Croupier 常见问题的诊断和解决方法。

目录

  • 目录
  • 快速诊断流程
  • 服务启动问题
    • Server 无法启动
    • Agent 无法连接到 Server
  • 函数调用问题
    • 调用超时
    • 权限被拒绝
    • 函数未找到
  • 性能问题
    • 高内存使用
    • 高 CPU 使用
    • 数据库连接池耗尽
  • 审批流程问题
    • 审批超时
  • 数据一致性问题
    • Agent 离线后函数调用失败
    • 作业状态不同步
  • 日志分析
    • 查看错误日志
    • 查看特定函数调用日志
    • JSON 日志查询
  • 常见错误码
  • 获取帮助
    • 收集诊断信息
    • 联系支持
  • 相关文档

快速诊断流程

服务启动问题

Server 无法启动

症状

$ ./croupier-server --config configs/server.yaml
Error: failed to start server

诊断步骤

  1. 检查配置文件语法
# 验证 YAML 语法
python3 -c "import yaml; yaml.safe_load(open('configs/server.yaml'))"

# 或使用 croupier 自带的配置验证
./croupier config test --config configs/server.yaml
  1. 检查端口占用
# 检查 gRPC 端口
lsof -i :8443

# 检查 HTTP 端口
lsof -i :8080

# 如果被占用,查看占用进程
netstat -tlnp | grep 8443
  1. 检查 TLS 证书
# 验证证书文件存在
ls -la data/server.crt data/server.key data/ca.crt

# 验证证书有效
openssl x509 -in data/server.crt -text -noout

# 验证证书与私钥匹配
openssl x509 -noout -modulus -in server.crt | openssl md5
openssl rsa -noout -modulus -in server.key | openssl md5
# 两个 MD5 值应该相同

常见原因

错误信息原因解决方法
address already in use端口被占用关闭占用进程或修改配置端口
no such file or directory证书文件不存在生成或放置正确的证书文件
permission denied没有文件访问权限修改文件权限
invalid configurationYAML 配置错误修复配置文件语法

Agent 无法连接到 Server

症状

ERRO[0001] failed to connect to server: connection refused

诊断步骤

  1. 检查 Server 是否运行
# 检查 Server 进程
ps aux | grep croupier-server

# 检查 Server 健康状态
curl http://server:8080/healthz
  1. 检查网络连通性
# 测试网络连接
telnet server 8443

# 或使用 nc
nc -zv server 8443
  1. 检查 TLS 证书
# 从 Agent 测试 Server TLS
openssl s_client -connect server:8443 \
  -cert data/agent.crt \
  -key data/agent.key \
  -CAfile data/ca.crt
  1. 检查 Agent 配置
# agent.yaml
agent:
  server_addr: "server:8443"  # 确保地址正确
  tls:
    ca_file: "data/ca.crt"
    cert_file: "data/agent.crt"
    key_file: "data/agent.key"
    server_name: "server"  # 必须与证书 CN 匹配

函数调用问题

调用超时

症状

{
  "error": {
    "code": "DEADLINE_EXCEEDED",
    "message": "context deadline exceeded"
  }
}

解决方法

  1. 增加超时时间
{
  "function_id": "data.export",
  "options": {
    "timeout": 300  // 增加到 5 分钟
  }
}
  1. 检查游戏服务器响应
# 在 Agent 所在服务器检查
curl http://localhost:19090/healthz
  1. 使用异步调用
# 改为创建作业
POST /api/jobs
{
  "function_id": "data.export",
  "payload": {...}
}

权限被拒绝

症状

{
  "error": {
    "code": "PERMISSION_DENIED",
    "message": "没有权限执行该操作"
  }
}

解决方法

  1. 检查用户权限
# 获取当前用户信息
GET /api/auth/me

# 响应包含用户权限
{
  "permissions": ["player.view", "item.view"]
}
  1. 检查函数权限要求
# 获取函数详情
GET /api/functions/player.ban

# 响应包含所需权限
{
  "auth": {
    "permission": "player.ban",
    "two_person_rule": true
  }
}
  1. 添加权限或角色
// 通过用户管理界面或 API 添加权限
POST /api/users/{user_id}/roles
{
  "role_id": "gm"
}

函数未找到

症状

{
  "error": {
    "code": "NOT_FOUND",
    "message": "函数未注册"
  }
}

解决方法

  1. 检查函数是否注册
# 列出所有函数
GET /api/functions?game_id=my-game&env=prod
  1. 检查 Agent 状态
# 列出所有 Agent
GET /api/agents?game_id=my-game&env=prod

# 检查 Agent 是否在线
{
  "status": "online",
  "functions": ["player.ban", "player.kick"]
}
  1. 重新注册函数
# 在游戏服务器端重启 SDK
# 或触发 Agent 重新注册

性能问题

高内存使用

诊断

# 检查进程内存
top -p $(pgrep croupier-server)

# 或使用
ps aux | grep croupier-server

解决方法

  1. 调整日志配置
server:
  log:
    max_size: 50     # 减小日志文件大小
    max_backups: 2   # 减少备份数量
  1. 配置内存限制
# 使用 ulimit
ulimit -v 4194304  # 限制虚拟内存 4GB

# Docker 运行时限制
docker run -m 2g croupier-server

高 CPU 使用

诊断

# 检查 CPU 使用
top -p $(pgrep croupier-server)

# 生成 CPU profile
curl http://localhost:8080/debug/pprof/profile > cpu.prof

解决方法

  1. 检查日志级别
server:
  log:
    level: warn  # 生产环境使用 warn 或 error
  1. 启用缓存
server:
  cache:
    enabled: true
    backend: redis
    redis_addr: "localhost:6379"

数据库连接池耗尽

症状

ERRO[0001] failed to acquire database connection: connection pool exhausted

解决方法

server:
  db:
    max_open_conns: 100
    max_idle_conns: 10
    conn_max_lifetime: "1h"

审批流程问题

审批超时

症状

{
  "status": "pending",
  "error": "approval timeout"
}

解决方法

  1. 检查审批配置
server:
  audit:
    approval_timeout: "48h"  # 增加超时时间
  1. 查看待审批列表
GET /api/approvals?state=pending
  1. 催办审批
# 通过系统通知相关人员

数据一致性问题

Agent 离线后函数调用失败

解决方法

  1. 配置负载均衡
server:
  loadbalancer:
    strategy: "least_conn"  # 使用最少连接策略
  1. 配置健康检查
server:
  agent:
    heartbeat_interval: "30s"
    heartbeat_timeout: "2m"

作业状态不同步

症状

{
  "job_id": "job_123",
  "status": "running",
  "progress": 0.5
}
// 实际作业已完成,但状态未更新

解决方法

  1. 检查事件流
# 手动获取事件
GET /api/jobs/job_123/events
  1. 重启相关 Agent
systemctl restart croupier-agent

日志分析

查看错误日志

# Server 错误日志
grep "ERRO" /var/log/croupier/server.log

# Agent 错误日志
grep "ERRO" /var/log/croupier/agent.log

查看特定函数调用日志

# 查找特定函数的调用
grep "player.ban" /var/log/croupier/server.log

# 查看特定时间范围
awk '/2024-12-01T10:00/,/2024-12-01T11:00/' /var/log/croupier/server.log

JSON 日志查询

# 使用 jq 查询 JSON 日志
cat /var/log/croupier/server.log | jq 'select(.level=="error")'

# 查找特定用户操作
cat /var/log/croupier/server.log | jq 'select(.user_id=="user_123")'

常见错误码

错误码说明解决方法
INVALID_ARGUMENT参数错误检查请求参数格式
UNAUTHENTICATED未认证检查 Token 是否有效
PERMISSION_DENIED权限不足联系管理员添加权限
NOT_FOUND资源不存在检查函数/Agent 是否注册
ALREADY_EXISTS资源已存在使用更新而非创建
RESOURCE_EXHAUSTED请求过多等待后重试或增加限流
INTERNAL内部错误查看服务器日志
UNAVAILABLE服务不可用检查服务状态
DEADLINE_EXCEEDED超时增加超时时间

获取帮助

收集诊断信息

#!/bin/bash
# diagnostic.sh

echo "=== Croupier 诊断信息 ==="

echo ""
echo "=== 版本信息 ==="
./croupier-server --version

echo ""
echo "=== 配置文件 ==="
cat configs/server.yaml

echo ""
echo "=== 进程状态 ==="
ps aux | grep croupier

echo ""
echo "=== 网络连接 ==="
netstat -tlnp | grep croupier

echo ""
echo "=== 最近错误日志 ==="
tail -n 50 /var/log/croupier/server.log | grep ERRO

echo ""
echo "=== 磁盘使用 ==="
df -h

echo ""
echo "=== 内存使用 ==="
free -h

联系支持

收集以下信息后可以更快获得帮助:

  1. Croupier 版本
  2. 操作系统版本
  3. 错误日志(去除敏感信息)
  4. 配置文件(去除敏感信息)
  5. 复现步骤

相关文档

  • 监控指南
  • 安全配置
  • 配置管理
在 GitHub 上编辑此页
最后更新: 2026/1/9 23:19
Prev
安全配置