现象:CPU sy%(内核态)达到 70%
排查:
mpstat -P ALL 1 # 确认 sy 高
perf top # 发现大量 _raw_spin_lock
strace -p <PID> -c # 发现大量 epoll_wait 调用
根因:Redis 单线程 + 大量短连接导致频繁 epoll 系统调用
解决:改用连接池,减少连接创建/销毁
现象:iowait 50%,应用响应变慢
排查:
iostat -x 1 # 发现写 IOPS 异常高
iotop # 定位到应用写日志线程
lsof -p <PID> | grep log # 确认日志路径
根因:日志使用同步写(O_SYNC),大量小 IO
解决:改为异步写 / 缓冲写 / 写入 tmpfs 定期归档
现象:free -h 显示内存 95% 已用,但应用没 OOM
排查:
cat /proc/meminfo | grep -i cache # Cached 占了大半
cat /proc/meminfo | grep MemAvailable # 实际可用很多
根因:不是内存泄漏,而是 Page Cache 正常使用
解决:无需干预,内核在需要时会回收 Page Cache
现象:客户端连接失败,”Cannot assign requested address”
排查:
ss -s # TIME_WAIT 连接数过万
ss -tan state time-wait | wc -l
根因:微服务间使用短连接 HTTP/1.0,没有连接复用
解决:改为 HTTP/1.1 Keep-Alive,或启用 tcp_tw_reuse
现象:8 核机器,一个核 sy% 100%,其余核心空闲
排查:
mpstat -P ALL 1 # 某核心 si% 特别高
cat /proc/interrupts # 所有网卡中断都绑在 CPU0
根因:默认中断亲和性导致单核成为瓶颈
解决:配置 irqbalance 或手动设置 smp_affinity 分散中断