IT俱乐部-城北日常经验分享

浏览: 3686    评论: 0

运维场景中,Linux服务器响应迟缓、SSH登录卡顿、业务接口超时是高频问题,盲目重启只能临时缓解,无法根除隐患。本文基于生产环境实战经验,整理CPU、内存、磁盘IO、网络、进程、日志全维度排查流程,帮你快速锁定瓶颈,高效解决问题。


一、先定现象与基准,避免盲目排查

开始排查前,先明确核心问题,同时记录系统基准信息,为后续对比提供依据:
  1. 确认卡顿类型:突发性/持续性、单机/集群影响、是否有代码上线/配置修改/流量突增等变更

  2. 记录系统基础信息

# 查看内核与系统版本
uname -a
cat /etc/os-release
# 记录当前时间,方便对照日志时间点
date
这一步能规避大量无效排查,比如很多卡顿源于定时任务触发、新版本代码bug,提前确认变更可大幅缩短定位时间。

二、快速全局扫描:top命令定位核心资源瓶颈

top服务器性能排查的首选工具,可实时查看系统负载与进程资源占用,推荐带完整命令名的执行方式:
top -c
重点关注4类核心指标:
  • load average:1/5/15分钟系统平均负载,数值持续高于CPU核心数,代表资源争抢严重

  • %Cpu(s):用户态(us)、系统态(sy)、空闲(id)占比,sy过高多为IO/中断处理密集导致

  • %Mem:物理内存使用率,超过80%需警惕内存溢出风险

  • 进程列表:按CPU/内存排序,快速锁定高占用进程

小技巧:top默认3秒刷新,捕捉瞬时尖峰可改用top -d 1缩短采样间隔。

三、CPU深度拆解:区分计算密集与IO等待瓶颈

当top显示CPU占用过高时,需用mpstat细分CPU消耗类型,定位问题根源:
# 查看所有CPU核心详细统计,1秒采样1次,共3次
mpstat -P ALL 1 3
关键指标对应问题:
  • %usr偏高:用户程序计算密集,需优化算法或扩容CPU

  • %sys偏高:内核态消耗大,多为系统调用频繁、驱动异常导致

  • %iowait偏高:CPU等待磁盘IO,需转向磁盘IO排查

  • %steal偏高(云服务器):宿主机资源争抢,联系云厂商处理

定位到用户进程占用后,用pidstat精准查看进程CPU占用:
pidstat -u 1 5
该命令可展示进程CPU使用率、用户态/系统态时间占比,精度高于top。

四、内存压力检测:提前规避OOM杀手

内存不足会触发系统OOM Killer,强制终止关键进程,需提前识别内存压力:
# 查看内存整体使用情况(人性化单位)
free -h
# 查看内存、缓存、交换分区详细信息
cat /proc/meminfo | grep -E "Mem|Swap|Cache|Buffer"
核心判断标准:
  • available:真实可用内存(含可回收缓存),比free字段更具参考价值

  • Swap使用率:持续上涨代表物理内存耗尽,系统开始使用交换分区

  • Active(file):活跃文件缓存过大,会挤压应用程序内存空间

内存使用率超85%时,用pidstat -r定位内存占用大户:
pidstat -r 1 3
重点关注RSS(实际物理内存占用)和**%MEM**(内存占比)。

五、磁盘IO排查:找到隐形性能杀手

磁盘IO是最易被忽视的瓶颈,当%iowait偏高、系统无理由卡顿时,重点排查磁盘:
# 查看磁盘详细IO统计,1秒刷新1次,共5次
iostat -x 1 5
核心IO指标解读:
  • %util:磁盘繁忙度,持续超80%代表磁盘已饱和

  • await:IO请求平均等待时间(队列+服务时间),超20ms需优化

  • svctm:IO真实服务时间,反映磁盘硬件性能

  • avgqu-sz:平均请求队列长度,持续大于2说明请求堆积

定位繁忙磁盘后,用以下命令找到对应进程:
# root权限查看进程实时IO速率
iotop -oP
# 或用pidstat查看进程IO统计
pidstat -d 1 3
常见场景:数据库慢查询/批量写入导致日志盘繁忙、系统日志暴涨导致系统盘IO打满。

六、网络问题排查:定位带宽与连接异常

网络故障表现为连接超时、传输缓慢,分带宽流量连接状态两层排查:
  1. 带宽占用分析

# 查看网卡实时流量
sar -n DEV 1 5
# 安装iftop后,查看连接级流量
iftop -i eth0
关注rxkB/s(接收)、txkB/s(发送),确认是否达到网卡/带宽上限。
  1. TCP连接状态分析

# 查看TCP连接总体统计
ss -s
# 统计各状态连接数量
ss -ant | awk '{print $1}' | sort | uniq -c
异常状态处理:
  • TIME_WAIT过多:短连接频繁创建销毁,调优tcp_tw_reuse等内核参数

  • CLOSE_WAIT堆积:应用未正常关闭连接,存在句柄泄漏,需修复代码

七、进程深度剖析:perf+火焰图定位热点函数

锁定高占用进程后,若需分析内部执行热点,用perf采样分析:
# 对指定PID进程采样30秒,记录调用栈
perf record -p <PID> -g -- sleep 30
# 生成采样报告
perf report
需要可视化分析时,生成火焰图:
perf script | ./stackcollapse-perf.pl | ./flamegraph.pl > perf.svg
火焰图规则:横轴为采样时间占比,纵轴为调用栈深度,宽平的火焰区域就是CPU热点函数,是优化核心目标。
注意:部分最小化安装系统需安装kernel-debuginfo包才能正常使用perf。

八、系统调用追踪:strace定位进程异常行为

进程出现卡顿、无响应、资源占用异常时,用strace追踪系统调用,定位异常逻辑:
# 追踪已运行进程,统计系统调用耗时与次数
strace -p <PID> -c
# 启动进程时追踪,输出日志到文件
strace -o output.log <启动命令>
常见异常调用特征:
  • read/write频繁且数据量小:碎片化IO问题

  • open/stat调用过多:文件遍历、配置重载过于频繁

  • futex/mutex耗时高:程序内部锁竞争严重

生产慎用:strace会影响进程性能,高负载场景建议缩短采样时间,或在测试环境复现。

九、多维度综合监控:vmstat与dstat

需要同时观察进程、内存、IO、CPU趋势变化时,用综合监控工具:
# vmstat:基础综合监控,1秒刷新1次,共10次
vmstat 1 10
# dstat:更丰富的可视化监控,需安装
dstat -cdngy 1 5
vmstat核心列解读:
  • r/b:运行队列/阻塞队列,r持续大于CPU核数代表负载过高

  • si/so:交换分区换入换出量,非零代表内存压力大

  • bi/bo:块设备读写速率,直接反映IO负载

  • us/sy/id/wa:CPU时间分布,与top指标一致

dstat支持自定义扩展,可监控TCP连接、进程状态,适合长期持续观测。

十、日志关联分析:确认故障根本原因

性能数据仅能展示“发生了什么”,日志才能解释“为什么发生”,最后一步需关联时间点与日志:
# 倒序查看最近50条系统日志
journalctl -r -n 50
# 查看系统 messages 日志
tail -n 100 /var/log/messages
# 查看OOM killer 记录
dmesg | grep -i "killed process"
关联分析要点:
  1. 性能异常时间点是否有错误日志爆发

  2. 检索Out of memoryI/O error等关键报错

  3. 对照应用日志,排查慢查询、接口超时、程序异常堆栈

实战案例:磁盘await飙升但无高IO进程,最终通过dmesg发现磁盘控制器硬件故障,完成更换后恢复。

Linux卡顿排查工具速查表

排查场景
推荐命令
核心关注指标
系统整体负载
top、uptime
load average、CPU总使用率
CPU详细分析
mpstat、pidstat -u
%usr、%sys、%iowait
内存状态监控
free、pidstat -r
available、Swap使用率、RSS
磁盘IO诊断
iostat -x、iotop
%util、await、avgqu-sz
网络流量与连接
sar -n DEV、ss
网卡流量、TCP连接状态
进程热点分析
perf、strace
热点函数、系统调用分布
多维度综合监控
vmstat、dstat
进程、内存、IO、CPU联动趋势
全文详见:http://it-club.cn/post/802.html

TOP

评论列表


发表评论
来宾的头像

☞☞☞大流量卡免费领取

☞☞☞大流量卡免费领取

全国大流量卡免费领取

TOP

站点信息

  • 文章总数:802
  • 页面总数:1
  • 分类总数:4
  • 标签总数:29
  • 评论总数:265
  • 浏览总数:17407366