故障排除
本文档汇总了 CueMate 系统故障的诊断和解决方法。
1. macOS 平台
1.1 服务无响应
问题描述:某个后端服务无法访问,或者请求长时间没有响应。
诊断原则
状态 → 日志 → 资源 → 网络
按照这个顺序逐步排查,可以快速定位大部分服务问题。
排查步骤:
检查服务状态:
- 打开 容器监控 页面
- 查看所有服务的运行状态
- 确认问题服务是否正在运行
- 或使用命令:
docker compose ps
查看服务日志:
- 在容器监控页面点击服务的"日志"按钮
- 查看最近的错误信息
- 或使用命令:
docker compose logs cuemate-web-api
检查资源占用:
- 使用命令查看资源使用情况:
docker stats - 检查 CPU、内存是否超限
- 确认磁盘空间是否充足
- 使用命令查看资源使用情况:
快速健康检查命令
# 一键检查所有服务健康状态
curl http://localhost:3001/health # Web API
curl http://localhost:3002/health # LLM Router
curl http://localhost:3003/health # RAG Service
curl http://localhost:8000/api/v1/heartbeat # ChromaDB
wscat -c ws://localhost:10095 # CueMate-ASR (需安装 wscat)解决方案:
重启服务:
- 在容器监控页面点击"重启"按钮
- 或使用命令:
docker compose restart cuemate-web-api - 等待服务重启完成(约 30 秒)
增加资源限制:
- 打开 Docker Desktop 设置
- 增加分配给 Docker 的内存和 CPU
- 建议:内存 8GB+,CPU 4 核+
检查依赖服务:
- 确认所有依赖服务都正常运行
- 例如:web-api 依赖数据库,llm-router 依赖外部 API
- 按正确顺序启动服务
查看详细错误日志:
- 打开 日志管理
- 查看对应服务的 error 级别日志
- 根据具体错误信息进行排查
1.2 服务频繁崩溃
问题描述:某个服务反复自动重启,或者频繁停止运行。
服务崩溃常见原因排查顺序
- 最常见:内存溢出(OOM)- 70% 的崩溃由此引起
- 其次:未捕获的异常 - 20%
- 少见:磁盘空间不足 - 5%
- 罕见:死锁或循环依赖 - 5%
根本原因分类:
| 类型 | 表现 | 快速诊断方法 |
|---|---|---|
| 内存溢出 | 容器自动重启 | docker stats 查看内存使用率 |
| 代码异常 | 日志有报错堆栈 | 查看 error 级别日志 |
| 磁盘不足 | 写入操作失败 | df -h 查看磁盘空间 |
| 死锁 | 服务假死无响应 | 查看进程 CPU 状态 |
解决方案:
查看崩溃日志:
- 在 日志管理 中查看崩溃前的日志
- 查找 "Error"、"Fatal"、"Crash" 等关键词
- 记录错误堆栈信息
增加内存限制:
- 打开 Docker Desktop,增加内存分配
- 编辑
docker-compose.yml增加容器内存限制 - 重启 Docker 服务使配置生效
更新到最新版本:
- 检查是否有新版本发布
- 查看更新日志是否修复了相关 Bug
- 按照 版本升级 文档更新
报告问题:
- 收集完整的错误日志和重现步骤
- 在 GitHub Issues 提交 Bug 报告
- 提供系统环境信息(OS、Docker 版本等)
1.3 数据库连接失败
问题描述:服务启动时提示"数据库连接失败"或"无法访问 SQLite"。
NOTE
CueMate 使用 SQLite 作为数据库,数据库文件位于: ~/Library/Application Support/cuemate-desktop-client/data/sqlite/
SQLite 无需单独的数据库服务,所有数据都存储在 .db 文件中。
检查项:
数据库文件是否存在:
- 检查路径:
~/Library/Application Support/cuemate-desktop-client/data/sqlite/ - 确认
.db文件存在且可读 - 检查文件权限是否正确
- 检查路径:
数据库服务是否运行:
- 对于 SQLite,无需单独的数据库服务
- 检查文件是否被其他进程锁定
- 确认应用有读写权限
连接字符串是否正确:
- 检查数据库文件路径配置
- 确认路径使用绝对路径
- 验证路径中没有特殊字符
文件是否损坏:
- 尝试使用 SQLite 工具打开数据库
- 检查数据库完整性
- 如果损坏,从备份恢复
解决方案:
检查文件权限:
bash# 查看文件权限 ls -la ~/Library/Application\ Support/cuemate-desktop-client/data/sqlite/ # 修复权限 chmod 644 ~/Library/Application\ Support/cuemate-desktop-client/data/sqlite/*.db从备份恢复:
- 如果有备份,从备份恢复数据库
- 参考问题 17 的备份恢复方法
重建数据库:
- 删除损坏的数据库文件(先备份)
- 重启应用,会自动创建新数据库
- 重新导入数据
1.4 系统响应慢
问题描述:应用响应速度很慢,操作需要等待很长时间。
优化方法:
增加 Docker 资源分配:
- 打开 Docker Desktop > Settings > Resources
- 增加 CPU 核心数(建议 4 核+)
- 增加内存(建议 8GB+)
- 点击 Apply & Restart
使用更快的模型:
- 在 模型设置 中更换模型
- 使用 GPT-3.5-turbo 代替 GPT-4
- 使用国产模型(智谱 AI、Kimi、DeepSeek)
- 降低
max_tokens参数
启用缓存(如果支持):
- 某些模型支持缓存相同请求
- 在模型配置中启用缓存
- 清理过期缓存释放空间
优化数据库查询:
- 定期清理旧数据
- 删除不需要的历史记录
- 在 AI 对话记录 中批量删除
清理日志和临时文件:
- 在 日志管理 中清理旧日志
- 删除临时文件和缓存
- 释放磁盘空间
1.5 CPU 占用高
问题描述:查看活动监视器时,CueMate 或 Docker 占用大量 CPU 资源。
TIP
正常 CPU 占用率:
- 空闲状态:5-10%
- 语音识别中:20-40%
- AI 生成回答:10-20%
- 超过 60%:可能存在性能问题
解决方案:
限制并发请求数:
- 避免同时发起多个 AI 请求
- 等待上一个请求完成再发起新请求
- 关闭不使用的功能窗口
降低语音识别精度:
- 在 语音设置 中调整识别参数
- 降低采样率可减少 CPU 占用
- 关闭实时识别,改用按需识别
使用更小的模型:
- 避免使用超大参数模型
- 本地模型比云端模型占用更多 CPU
- 优先使用云端 API 模型
优化代码逻辑:
- 更新到最新版本
- 最新版本通常有性能优化
- 查看更新日志了解改进
关闭后台服务:
- 暂时停止不使用的服务
- 在容器监控页面停止服务
- 需要时再重新启动
1.6 内存占用高
问题描述:系统内存占用持续增长,或者提示内存不足。
优化措施:
清理缓存:
- 在系统设置中清理应用缓存
- 清理浏览器缓存(如果使用 Web 界面)
- 重启 Docker 清理容器缓存
减少并发处理:
- 避免同时打开多个功能窗口
- 减少同时运行的服务数量
- 限制每个服务的并发连接数
限制模型大小:
- 避免加载过大的本地模型
- 使用云端 API 代替本地模型
- 减少模型上下文长度(
max_tokens)
定期重启服务:
- 长时间运行可能导致内存泄漏
- 定期重启可释放内存
- 建议每周重启一次 Docker 服务
升级硬件:
- 如果内存经常不足,考虑升级内存
- 建议至少 16GB 内存
- 关闭其他占用内存的应用
1.7 磁盘空间不足
问题描述:系统提示磁盘空间不足,或者应用无法保存数据。
清理方法:
清理 Docker 资源:
bash# 清理未使用的镜像、容器、网络、卷 docker system prune -a # 仅清理悬空镜像和停止的容器 docker system prune # 清理所有卷(谨慎使用) docker volume prune清理应用日志:
- 打开 日志管理
- 选择日期范围批量删除旧日志
- 或使用命令:
bash# 删除 7 天前的日志 find ~/Library/Application\ Support/cuemate-desktop-client/data/logs -mtime +7 -delete清理临时文件:
bash# 清理系统临时文件 rm -rf /tmp/cuemate # 清理下载的临时文件 rm -rf ~/Downloads/cuemate-temp清理备份文件:
bash# 删除 30 天前的备份 find ~/backup/cuemate -mtime +30 -delete # 或手动删除旧备份 rm -rf ~/backup/cuemate/backup_20260101*压缩大文件:
- 压缩知识库文档
- 清理不需要的向量数据
- 删除重复的面试记录
1.8 无法连接外部 API
问题描述:配置模型后,测试连接提示"无法连接"或"网络错误"。
检查项:
网络连接是否正常:
- 检查网络连接状态
- 尝试访问其他网站
- 使用
ping测试网络连通性
防火墙是否阻止:
- 检查系统防火墙设置
- 确认允许 CueMate 访问网络
- 检查防火墙规则
代理设置是否正确:
- 如果使用代理,检查代理配置
- 确认代理地址和端口正确
- 测试代理是否可用
DNS 解析是否正常:
- 使用
nslookup测试域名解析 - 尝试更换 DNS 服务器(如 8.8.8.8)
- 检查 hosts 文件是否有错误配置
- 使用
解决方案:
配置代理:
- 在系统设置或环境变量中配置代理
- 设置
HTTP_PROXY和HTTPS_PROXY - 重启应用使配置生效
更换 DNS:
- 打开系统网络设置
- 更换 DNS 服务器为 8.8.8.8 或 1.1.1.1
- 清除 DNS 缓存
使用国内模型:
- 如果无法访问国外 API
- 使用国内大模型服务(智谱 AI、Kimi、DeepSeek)
- 无需科学上网即可使用
1.9 WebSocket 连接失败
问题描述:语音识别时提示"WebSocket 连接失败"或"无法连接语音服务"。
解决方案:
检查防火墙规则:
- 确认防火墙允许 WebSocket 连接
- 允许端口 10095(cuemate-asr)
- 添加应用到防火墙白名单
验证端口开放:
bash# 检查端口是否监听 lsof -i :10095 # 测试端口连通性 telnet localhost 10095检查服务状态:
- 打开 容器监控
- 确认 cuemate-asr 服务正在运行
- 查看服务日志排查错误
重启语音服务:
- 在容器监控页面重启 cuemate-asr
- 等待服务重启完成
- 重新测试 WebSocket 连接
1.10 权限被拒绝
问题描述:提示"权限不足"或"访问被拒绝"。
解决方案:
检查文件权限:
bash# 查看文件权限 ls -la ~/Library/Application\ Support/cuemate-desktop-client/ # 修复权限 chmod -R 755 ~/Library/Application\ Support/cuemate-desktop-client/检查系统权限:
- 打开"系统设置" > "隐私与安全性"
- 检查麦克风权限
- 检查录屏与系统录音权限
- 检查文件和文件夹权限
以管理员身份运行:
- 某些操作需要管理员权限
- macOS:使用
sudo命令 - 谨慎使用,避免安全风险
1.11 端口冲突
问题描述:服务启动失败,提示"端口已被占用"。
解决方案:
查找占用端口的程序:
bash# 查看端口占用 lsof -i :3001 lsof -i :10095 # 查看所有监听端口 lsof -i -P | grep LISTEN关闭占用端口的程序:
bash# 根据 PID 关闭进程 kill -9 <PID> # 或使用活动监视器手动关闭更改 CueMate 端口(不推荐):
- 编辑
docker-compose.yml文件 - 修改端口映射配置
- 重启服务使配置生效
- 编辑
重启系统:
- 如果无法找到占用程序
- 重启 Mac 可释放所有端口
- 重启后再次启动 CueMate
1.12 Docker 镜像损坏
问题描述:服务无法启动,提示"镜像损坏"或"无法加载镜像"。
解决方案:
删除损坏的镜像:
bash# 查看所有镜像 docker images # 删除指定镜像 docker rmi <IMAGE_ID> # 删除所有悬空镜像 docker image prune重新加载镜像:
- 如果是离线安装包,重新加载镜像
- 或从镜像仓库拉取最新镜像
- 参考 安装指南
重建容器:
bash# 停止所有容器 docker compose down # 删除容器和镜像 docker compose down --rmi all # 重新构建 docker compose up -d
1.13 配置文件丢失或损坏
问题描述:应用启动失败,提示"配置文件不存在"或"配置格式错误"。
解决方案:
检查配置文件位置:
bash# 配置文件路径 ~/Library/Application Support/cuemate-desktop-client/config/ # 查看配置文件 ls -la ~/Library/Application\ Support/cuemate-desktop-client/config/恢复默认配置:
- 删除损坏的配置文件
- 重启应用,会自动创建默认配置
- 重新配置模型和设置
从备份恢复:
- 如果有配置文件备份
- 复制备份文件到配置目录
- 重启应用
手动修复配置文件:
- 使用文本编辑器打开配置文件
- 检查 JSON 格式是否正确
- 修复语法错误或缺失字段
1.14 证书过期或无效
问题描述:访问某些服务时提示"证书无效"或"SSL 错误"。
解决方案:
更新系统证书:
- 更新 macOS 系统到最新版本
- 系统会自动更新根证书
忽略证书验证(不推荐):
- 仅用于测试环境
- 生产环境不建议关闭证书验证
使用 HTTP 代替 HTTPS:
- 如果是内网服务
- 可以使用 HTTP 协议
- 修改 API URL 为 HTTP
1.15 日志查看困难
问题描述:日志文件太大,或者找不到需要的错误信息。
解决方案:
使用日志管理页面:
- 打开 日志管理
- 使用日期和级别过滤
- 搜索关键词定位错误
使用命令行工具过滤:
bash# 查看最近 100 行(以 web-api 为例) tail -n 100 ~/Library/Application\ Support/cuemate-desktop-client/data/logs/web-api/2026-01-15/error.log # 实时查看日志 tail -f ~/Library/Application\ Support/cuemate-desktop-client/data/logs/web-api/2026-01-15/error.log # 搜索关键词 grep "Error" ~/Library/Application\ Support/cuemate-desktop-client/data/logs/web-api/2026-01-15/error.log # 统计错误次数 grep -c "Error" ~/Library/Application\ Support/cuemate-desktop-client/data/logs/web-api/2026-01-15/error.log导出日志到文件:
- 在日志管理页面导出日志
- 使用文本编辑器查看
- 分享给技术支持分析
1.16 应用崩溃无法启动
问题描述:应用启动后立即崩溃,或者无法正常启动。
解决方案:
查看崩溃报告:
- macOS:"控制台" > "用户报告" > "应用崩溃"
- 找到 CueMate 的崩溃报告
- 记录错误信息
清理缓存和配置:
数据安全警告
执行以下命令前,强烈建议先备份数据!删除操作不可恢复。
务必先执行备份命令,再执行删除命令。
# 1. 先备份配置和数据(重要!)
cp -r ~/Library/Application\ Support/cuemate-desktop-client ~/backup/
# 2. 然后才能删除缓存
rm -rf ~/Library/Caches/cuemate-desktop-client
# 3. 删除临时文件
rm -rf /tmp/cuemate重新安装应用:
- 完全卸载 CueMate
- 重新下载最新版本安装包
- 重新安装
- 详见 卸载指南
检查系统兼容性:
- 确认 macOS 版本符合要求(>= 13.0)
- 检查硬件配置是否满足需求
- 更新系统到最新版本
1.17 数据备份失败
问题描述:执行备份操作时失败,或者备份文件无法使用。
备份数据的正确方法:
#!/bin/bash
# CueMate 数据备份脚本
BACKUP_DIR=~/backup/cuemate
DATE=$(date +%Y%m%d_%H%M%S)
DATA_DIR=~/Library/Application\ Support/cuemate-desktop-client/data
echo "开始备份 CueMate 数据..."
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份 SQLite 数据库
if [ -d "$DATA_DIR/sqlite" ]; then
echo "备份数据库..."
cp -r "$DATA_DIR/sqlite" "$BACKUP_DIR/sqlite_$DATE"
fi
# 备份向量数据库
if [ -d "$DATA_DIR/chroma" ]; then
echo "备份向量数据..."
cp -r "$DATA_DIR/chroma" "$BACKUP_DIR/chroma_$DATE"
fi
# 备份配置文件
if [ -d ~/Library/Application\ Support/cuemate-desktop-client/config ]; then
echo "备份配置文件..."
cp -r ~/Library/Application\ Support/cuemate-desktop-client/config "$BACKUP_DIR/config_$DATE"
fi
# 打包压缩
echo "压缩备份文件..."
cd $BACKUP_DIR
tar -czf "cuemate_backup_$DATE.tar.gz" \
"sqlite_$DATE" \
"chroma_$DATE" \
"config_$DATE" 2>/dev/null
# 清理临时文件
rm -rf "sqlite_$DATE" "chroma_$DATE" "config_$DATE"
echo "备份完成: $BACKUP_DIR/cuemate_backup_$DATE.tar.gz"验证备份文件:
# 查看备份文件大小
ls -lh ~/backup/cuemate/
# 解压测试
tar -tzf ~/backup/cuemate/cuemate_backup_20260115.tar.gz
# 完整性检查
tar -xzf ~/backup/cuemate/cuemate_backup_20260115.tar.gz -O > /dev/null1.18 数据恢复失败
问题描述:尝试从备份恢复数据时失败。
恢复数据的正确方法:
#!/bin/bash
# CueMate 数据恢复脚本
BACKUP_FILE=$1
DATA_DIR=~/Library/Application\ Support/cuemate-desktop-client/data
if [ -z "$BACKUP_FILE" ]; then
echo "用法: ./restore.sh <备份文件路径>"
exit 1
fi
echo "开始恢复 CueMate 数据..."
echo "备份文件: $BACKUP_FILE"
# 停止服务
echo "停止 Docker 服务..."
cd ~/Library/Application\ Support/cuemate-desktop-client
docker compose stop
# 解压备份文件
echo "解压备份文件..."
TEMP_DIR=$(mktemp -d)
tar -xzf "$BACKUP_FILE" -C "$TEMP_DIR"
# 恢复数据库
if [ -d "$TEMP_DIR/sqlite_"* ]; then
echo "恢复数据库..."
rm -rf "$DATA_DIR/sqlite"
cp -r "$TEMP_DIR"/sqlite_* "$DATA_DIR/sqlite"
fi
# 恢复向量数据
if [ -d "$TEMP_DIR/chroma_"* ]; then
echo "恢复向量数据..."
rm -rf "$DATA_DIR/chroma"
cp -r "$TEMP_DIR"/chroma_* "$DATA_DIR/chroma"
fi
# 恢复配置文件
if [ -d "$TEMP_DIR/config_"* ]; then
echo "恢复配置文件..."
rm -rf ~/Library/Application\ Support/cuemate-desktop-client/config
cp -r "$TEMP_DIR"/config_* ~/Library/Application\ Support/cuemate-desktop-client/config
fi
# 清理临时文件
rm -rf "$TEMP_DIR"
# 启动服务
echo "启动 Docker 服务..."
docker compose start
echo "恢复完成!"
echo "请等待服务启动(约 30 秒),然后重新打开应用。"使用方法:
# 赋予脚本执行权限
chmod +x restore.sh
# 执行恢复
./restore.sh ~/backup/cuemate/cuemate_backup_20260115.tar.gz1.19 健康检查脚本
问题描述:不知道如何快速检查系统整体状态。
健康检查脚本:
#!/bin/bash
# CueMate 健康检查脚本
echo "=========================================="
echo " CueMate 系统健康检查"
echo "=========================================="
echo ""
# 检查 Docker
echo "[ 1/6 ] 检查 Docker..."
if docker ps &>/dev/null; then
echo " ✓ Docker 运行正常"
else
echo " ✗ Docker 未运行或无权限"
fi
echo ""
# 检查服务
echo "[ 2/6 ] 检查服务状态..."
services=("web" "web-api" "llm-router" "rag-service" "asr" "chroma")
for service in "${services[@]}"; do
if docker ps | grep -q "cuemate-$service"; then
echo " ✓ cuemate-$service 运行正常"
else
echo " ✗ cuemate-$service 未运行"
fi
done
echo ""
# 检查端口
echo "[ 3/6 ] 检查端口监听..."
ports=(80 3001 3002 3003 8000 10095)
port_names=("Web" "Web-API" "LLM-Router" "RAG-Service" "ChromaDB" "ASR")
for i in "${!ports[@]}"; do
port=${ports[$i]}
name=${port_names[$i]}
if lsof -i :$port &>/dev/null; then
echo " ✓ 端口 $port ($name) 正在监听"
else
echo " ✗ 端口 $port ($name) 未监听"
fi
done
echo ""
# 检查磁盘空间
echo "[ 4/6 ] 检查磁盘空间..."
available=$(df -h ~/ | awk 'NR==2 {print $4}')
echo " 可用空间: $available"
echo ""
# 检查内存使用
echo "[ 5/6 ] 检查 Docker 资源使用..."
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" | head -n 7
echo ""
# 测试服务健康
echo "[ 6/6 ] 测试服务健康检查..."
endpoints=(
"http://localhost:3001/health:Web-API"
"http://localhost:3002/health:LLM-Router"
"http://localhost:3003/health:RAG-Service"
)
for endpoint in "${endpoints[@]}"; do
url="${endpoint%%:*}"
name="${endpoint##*:}"
if curl -s -f "$url" > /dev/null 2>&1; then
echo " ✓ $name 健康检查通过"
else
echo " ✗ $name 健康检查失败"
fi
done
echo ""
echo "=========================================="
echo " 检查完成"
echo "=========================================="使用方法:
# 保存为 health-check.sh
chmod +x health-check.sh
./health-check.sh1.20 性能监控和分析
问题描述:想要持续监控系统性能,发现潜在问题。
监控脚本:
#!/bin/bash
# CueMate 性能监控脚本
LOG_FILE=~/cuemate-monitor.log
INTERVAL=60 # 监控间隔(秒)
echo "开始监控 CueMate 性能(每 $INTERVAL 秒)"
echo "日志文件: $LOG_FILE"
echo "按 Ctrl+C 停止监控"
echo ""
while true; do
echo "==================== $(date) ====================" >> $LOG_FILE
# 记录 Docker 容器资源使用
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}" >> $LOG_FILE
# 记录磁盘空间
echo "" >> $LOG_FILE
echo "磁盘空间:" >> $LOG_FILE
df -h ~/ | grep -v Filesystem >> $LOG_FILE
# 记录服务状态
echo "" >> $LOG_FILE
echo "服务状态:" >> $LOG_FILE
docker compose ps >> $LOG_FILE
echo "" >> $LOG_FILE
# 在终端显示简要信息
echo "[$(date +%H:%M:%S)] 监控数据已记录"
sleep $INTERVAL
done分析日志:
# 查看最近的监控数据
tail -n 50 ~/cuemate-monitor.log
# 统计 CPU 使用率
grep "cuemate-web-api" ~/cuemate-monitor.log | awk '{print $2}'
# 查看内存趋势
grep "cuemate-" ~/cuemate-monitor.log | awk '{print $1, $3}'2.Windows 平台
开发中
Windows 版本正在开发中,敬请期待。
如果你对 Windows 版本有任何建议或需求,欢迎通过以下方式反馈:
- GitHub Issues:https://github.com/cuemate-chat/cuemate/issues
- 邮箱:nuneatonhydroplane@gmail.com
获取更多帮助
如果以上方法都无法解决你的问题,可以通过以下方式获取帮助:
准备信息
在联系技术支持前,请准备以下信息:
系统环境:
- macOS 版本号(如 macOS 15.0)
- 芯片类型(Apple Silicon 或 Intel)
- CueMate 版本号
完整错误日志:
- 从 日志管理 导出相关日志
- 包含错误发生的时间和上下文
- 截图或文本形式
问题重现步骤:
- 详细描述如何重现问题
- 列出具体的操作步骤
- 说明预期结果和实际结果
已尝试的解决方法:
- 列出已经尝试的解决方案
- 说明尝试结果
- 避免重复建议
联系方式
- GitHub Issues:https://github.com/cuemate-chat/cuemate/issues
- 邮箱:nuneatonhydroplane@gmail.com
