Files
easygoadmin-wiki/EasyGoAdmin_GoFrame_NaiveVue/zh/deploy/troubleshooting.md
T
2026-10-20 21:53:26 +08:00

84 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 11.10 故障排查手册
:::tip 概述
按故障类别速查:启动失败 / 认证授权 / 数据异常 / 性能 / 缓存 / 定时任务 / 文件上传。每类给出症状→定位→处理。
:::
## 启动类
| 症状 | 定位 | 处理 |
|------|------|------|
| 启动即退出 | 端口占用 / 配置缺失 / Go 版本 | netstat 查端口;从部署目录运行;核对 go 版本 |
| 数据库连接失败 | link 串/网络/账号 | telnet 端口;核对 database.default |
| Redis 告警降级 | 地址/密码/网络 | 修复后自动恢复(运行期探测);/api/cache/info 验证 |
| IdentityLoader 告警 | 依赖接线缺失 | 查 internal/cmd 空白导入与 logic init |
| panic 堆栈 | 看日志堆栈 | 定位代码 bug;errorStack=false 时看服务端日志 |
## 认证授权类
| 症状 | 定位 | 处理 |
|------|------|------|
| 全部 401 | jwt.secret 变更 / 时钟 | 改密钥后需重新登录;核对服务器时间 |
| 登录后单接口 401 | 令牌过期/黑名单 | 刷新令牌;查是否被强退拉黑 |
| 403 | 权限链四环 | gmeta permission ↔ 菜单节点 ↔ 角色勾选 ↔ 身份缓存(DEL identity 键) |
| 权限改了不生效 | 身份缓存 300s | SavePermission 应主动清;查清理链;等过期 |
| 租户 1005/1006 | 租户过期/禁用 | 改租户状态/过期;等 60s 或 DEL tenant:info |
## 数据类
| 症状 | 定位 | 处理 |
|------|------|------|
| 租户串数据 | tenantTables 漏登记 | 补登记 + 复查查询是否绕过 dao.Ctx |
| 已删除数据可见 | 绕过 dao.Ctx / 手写条件 | 修复为 dao.Ctx 唯一入口 |
| 唯一冲突 1062 裸报错 | 无预检(设计内兜底) | 补 UniqueFields(Group=索引范围) |
| 新字段不返回 | entity/Req/Res/ToData 四处 | 逐一核对(见 3.3 加字段工作流) |
| 字典文本不显示 | SerializeMaps/Text 字段 | spec 声明 + 结构体 {Field}Text |
## 性能类
| 症状 | 定位 | 处理 |
|------|------|------|
| 接口慢 | 慢查询 / N+1 | debug 开 SQL 日志;查 userExpandNames 类批查是否缺失 |
| 内存增长 | 泄漏 | /api/server/info heapObjects/goroutines 趋势 |
| 并发瓶颈 | 连接池 | DB 池/Redis 池参数核算 |
| 磁盘满 | 日志/上传/备份 | LogClean 是否运行;upload 清理;扩容 |
| 大表超时 | city 全表查询 | 改级联路径(parent_code 索引) |
## 缓存类
| 症状 | 定位 | 处理 |
|------|------|------|
| mode=memory | Redis 不可用 | 修复 Redis;多实例期间限流/锁退化单机 |
| 键值陈旧 | TTL/失效点 | 对照 4.8 键全集;DEL 指定键 |
| 多实例不一致 | Redis 未共享 | 确认 mode=redis |
| 命中率低 | TTL 过短 | /api/cache/info hitRate;调 TTL |
## 定时任务类
| 症状 | 定位 | 处理 |
|------|------|------|
| 任务不执行 | 未发布/cron 无效/未挂载 | status=1?daemonStatus?Scheduler.mounted vs expected |
| 重复执行 | 锁失效 | Redis 可用性(job:lock 依赖);execute_policy 核对 |
| 执行失败 | 看 job_log exception | HTTP 超时(30s)/handler panic/数据库错误 |
| 任务日志堆积 | LogClean 未跑 | 检查 LogClean 任务与 retentionDays |
## 文件上传类
| 症状 | 定位 | 处理 |
|------|------|------|
| 上传 413/拒绝 | maxSize/白名单/嗅探 | 对照 file.* 配置 |
| 图片 404 | domainUrl/转正失败 | 库中相对路径 vs GetFileUrl;查 temp 是否被清 |
| 富文本图片不显示 | 读取绕过基座 | 走 Detail/List(自动 Expand) |
| temp 堆积 | CleanTemp 未生效 | gcron 注册/tempExpireDays>0 |
## 排障通用路径
```text
1. /api/health 服务活着吗
2. /api/cache/info 缓存模式与健康
3. /api/server/info 全景体检(DB/磁盘/调度器)
4. 启动日志 告警项逐一确认
5. /api.json 接口与文档一致性
6. 操作/登录日志 异常行为追溯
```