跳到主要内容

性能监控与故障排查

性能问题通常表现为慢、卡、不可用。系统化的排查路径是:先定位资源瓶颈(CPU/内存/磁盘/网络),再结合日志与系统调用分析根因。

CPU 监控

top # 经典动态视图,按 P 按 CPU 排序
htop # 增强版,支持鼠标与彩色
uptime # 1/5/15 分钟平均负载
vmstat 1 5 # 每秒采样,共 5 次
mpstat -P ALL 1 # 各 CPU 核心使用率,需 sysstat

负载(load average)高于 CPU 核心数表示有任务在等待;%us(用户态)高多为应用问题,%sy(内核态)高则可能驱动或系统调用过多,%iowait 高则瓶颈在 IO。

内存监控

free -h # 总体内存与交换分区
vmstat 1 5 # si/so 反映换入换出
cat /proc/meminfo # 详细内存信息
slabtop # 内核 slab 分配器

关注 available 而非 free,前者是应用程序实际可用内存;si/so 持续非零说明存在换页,可能物理内存不足。

磁盘与 IO

df -h # 各分区使用率
du -sh /var/log/* # 定位大文件
iostat -xz 1 # 每秒 IO 统计
iotop # 按进程查看 IO

%util 接近 100% 表示设备饱和,await 反映平均 IO 延迟,机械盘 > 10ms 需警惕。dudf 结果不一致时,通常是文件已被删除但进程仍持有句柄,可通过 lsof | grep deleted 查找。

网络监控

ss -tunap # 替代 netstat,查看连接与进程
ip -s link # 网卡统计
iftop -i eth0 # 实时连接流量
nethogs eth0 # 按进程查看流量
mtr 8.8.8.8 # 路由追踪与丢包

TIME_WAITCLOSE_WAIT 大量堆积暗示连接未正常关闭;dropoverruns 增长则可能网卡缓冲不足。

日志排查思路

journalctl -p err -b # 本次启动的错误日志
dmesg | tail # 内核环缓冲
grep -i "error\|fail" /var/log/syslog

排查步骤:先看时间点对齐应用日志与系统日志;再按调用链追踪上下游服务;最后通过监控指标确认根因。

strace 跟踪系统调用

strace 可以附加到运行中的进程,观察其系统调用,定位卡住或异常行为。

strace -p <pid> # 附加进程
strace -e openat -f ./script # 跟踪某命令的文件访问
strace -c -p <pid> # 统计调用次数与耗时

常见场景:进程卡在 futexreadconnect,分别提示锁竞争、IO 阻塞或网络问题。结合 -T 可看每次调用的耗时,-e 可过滤关注的调用。