Linux服务器响应迟缓需排查CPU、内存、磁盘三类瓶颈:CPU看%us/%sy与r值,内存重在available及si/so,磁盘盯%util、await与D态进程,并通过多工具交叉验证和排除干扰项准确定位根因。

如果您观察到Linux服务器响应迟缓、服务超时或负载异常升高,则可能是由于CPU、内存或磁盘中某一项或多项资源达到瓶颈。以下是针对这三类核心资源的综合排查技巧:
一、CPU瓶颈识别与定位
CPU瓶颈表现为高%us(用户态)或%sy(内核态)持续超过80%,同时运行队列长度(r值)长期大于CPU逻辑核数,说明任务积压严重。需区分是计算密集型、系统调用频繁还是I/O等待导致的假性高占用。
1、执行 top -b -n1 | head -n5 快速查看当前负载及CPU总体使用分布。
2、运行 mpstat -P ALL 1 3 检查各CPU核心是否出现不均衡占用,单核100%而其余空闲表明存在绑核或单线程瓶颈。
3、使用 ps aux --sort=-%cpu | head -n10 提取CPU消耗前10的进程,并记录其PID。
4、对高CPU进程进一步分析:执行 top -H -p
二、内存瓶颈识别与定位
内存瓶颈不仅体现为可用内存(free)过低,更关键的是观察是否触发频繁换页(si/so非零)、kswapd持续活跃、或进程因OOM被内核杀死。当vmstat中wa值升高且伴随大量pgpgin/pgpgout,往往意味着内存不足引发IO放大效应。
1、运行 free -h 查看Mem和Swap总量与已用比例,重点关注available字段而非free。
2、执行 vmstat 1 5 观察si(swap-in)与so(swap-out)列是否持续大于0,同时检查b(阻塞进程数)是否频繁非零。
3、使用 smem -r -c "pid user comm rss pss uss" 按实际物理内存占用(PSS)排序进程,识别内存泄漏嫌疑进程。
4、检查内核是否触发OOM Killer:执行 dmesg -T | grep -i "killed process",确认是否存在因内存耗尽强制终止进程的记录。
三、磁盘I/O瓶颈识别与定位
磁盘瓶颈的核心指标是I/O等待时间(%util接近100%、await显著高于svctm)、长队列(avgqu-sz > 1)、以及高iowait CPU占比。此时即使CPU空闲,系统仍卡顿,因大量进程处于D状态(不可中断睡眠)等待IO完成。
1、运行 iostat -dx 1 3 查看各块设备的%util、await、svctm与avgqu-sz,若%util ≥ 95%且await > 10ms(机械盘)或> 1ms(SSD),即存在IO压力。
2、执行 iotop -o 显示当前正在执行I/O操作的进程及其读写速率,定位具体发起大量IO的进程。
3、检查进程IO状态:对可疑PID运行 cat /proc/
4、确认是否存在D状态进程堆积:执行 ps aux | awk '$8 ~ /^D/ {print $0}',输出结果中进程数过多(如>10)且长时间存在,表明底层存储响应异常。
四、多维交叉验证法
单一工具易误判,需结合多个维度交叉印证。例如:top显示CPU高但mpstat发现仅1核满载,同时iostat显示某盘%util=100%,则应优先排查该盘对应进程的IO行为,而非盲目优化CPU代码。
1、同步采集三类指标:在终端并行运行 vmstat 1、iostat -x 1、pidstat -u -r -d 1,观察数值联动变化。
2、检查等待链:对高r值场景,执行 cat /proc/loadavg 并比对 ps r 输出,确认运行态进程是否真实可调度,抑或大量处于D态造成虚假负载。
3、验证内存与IO关联:当vmstat中pgpgin激增且iostat中rkB/s同步飙升,大概率是因内存不足触发Swap读入,此时应优先处理内存问题而非磁盘性能。
4、使用 sar -q -r -u -d 1 5 一次性获取负载、内存、CPU、磁盘历史采样,避免工具切换引入时间偏差。
五、快速隔离干扰项
排除监控工具自身开销、日志刷盘、定时任务等临时扰动,确保所见即所得。例如htop本身可能短暂拉升CPU,而某些日志轮转脚本会在整点集中写入GB级文件,掩盖真实业务瓶颈。
1、暂停非必要监控:临时停止collectd、prometheus-node-exporter等采集进程,再复测关键指标。
2、检查cron任务:执行 grep -r ">/dev/null" /etc/cron* 2>/dev/null | head -10,筛查是否存在未重定向输出的定时脚本在后台刷屏式写日志。
3、审计大文件写入:运行 find /var/log -type f -size +100M -mtime -1 定位近24小时内增长异常的日志文件。
4、禁用透明大页(THP):对数据库或Java服务,执行 echo never > /sys/kernel/mm/transparent_hugepage/enabled 防止周期性内存整理引发卡顿。











