Files
easygoadmin-wiki/EasyGoAdmin_Gin_AntdVue/zh/deploy/performance.md
T
2026-10-25 17:24:27 +08:00

57 lines
2.1 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.7 性能调优
:::tip 概述
调优顺序:**先观测、再定位、后调参**。可观测面有三层:Prometheus 指标(宏观)、服务监控页(主机)、SQL debug 日志(微观)。本页给出常见瓶颈与对应手段。
:::
## 调优顺序
```text
① /metrics 看哪类路由耗时高、错误率高
② 服务监控页看主机资源(CPU/内存/goroutine)
③ SQL debug 定位慢查询
④ 按瓶颈类型施加对应手段
⑤ 复测指标
```
## 数据库层
| 症状 | 手段 |
|---|---|
| 慢查询 | 高频列补索引(idx_{表}_{列});核对是否 LIKE 前置通配 |
| 连接耗尽 | 调 database 连接池(maxOpenConns/maxIdleConns/connMaxLifetime),核对应用与 MySQL 两侧 |
| 大分页深翻 | 避免大 offset;业务上限 pageSize 500 已兜底 |
| 频繁字典查询 | 字典缓存已内置;确认未被频繁 Refresh 打穿 |
## 应用层
| 症状 | 手段 |
|---|---|
| goroutine 突增 | 监控页观察趋势;排查泄漏(未收尾的 goroutine、阻塞 channel) |
| 内存增长 | 大查询/导出是否一次载入过大结果集(导出走流式/分批) |
| 接口整体变慢 | 看限流是否误伤、日志是否过度(logQuery 巨量) |
| 日志盘涨 | 校准 job.logRetentionDays;zap 轮转配置 |
## 缓存层
- Redis 命中率低 → 检查键 TTL 与失效策略
- 降级内存模式 → 修复 Redis(多实例下内存模式语义退化)
- 大 key 排查 → Info memory 分区 + 键空间抽样
## 限流与入口
- 公网收敛 rateLimit.limit(默认 120/min/IP 已可用)
- Nginx 层配连接/速率限制作为第一道闸
- 上传大小 maxSize 与 client_max_body_size 对齐,防大文件打内存
## 容量规划参考
- 无状态应用可横向扩(多实例共享 Redis/MySQL;限流计数 Redis 共享)
- 读压力大优先加只读库/缓存,而非盲目加应用实例
- 监控告警:按 route 维度配 P95 耗时与错误率阈值
## 相关
- [5.17 链路追踪与指标](/zh/core/trace-metrics.html)
- [11.10 故障排查手册](/zh/deploy/troubleshooting.html)