2.1 KiB
2.1 KiB
11.7 性能调优
:::tip 概述 调优顺序:先观测、再定位、后调参。可观测面有三层:Prometheus 指标(宏观)、服务监控页(主机)、SQL debug 日志(微观)。本页给出常见瓶颈与对应手段。 :::
调优顺序
① /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 耗时与错误率阈值