< 返回

    Linux 服务器性能瓶颈的判断方法

    2026-01-31 15:06 作者:技术部 阅读量:2

    当 Linux 服务器出现响应变慢、吞吐下降、负载异常升高、请求超时或用户投诉“卡顿”时,不要第一时间去看代码或升级硬件。正确的起点是用最短时间判断瓶颈属于哪一类资源:CPU 计算饱和、内存压力、磁盘 I/O 等待、网络饱和、还是锁/调度/线程阻塞。

    以下是 2025–2026 年生产环境中最实用、最高效的初步判断方法,通常 3–10 分钟内就能把问题范围缩小到 1–2 个方向。

    1. 全局一分钟健康快照(必跑的 5–6 条命令)

    按以下顺序快速执行,观察关键指标:

     
     
    顺序 命令 核心观察点(异常阈值参考) 指向的瓶颈类型
    1 uptime 或 cat /proc/loadavg load average(1/5/15 min)> 核数×1.5–2.5 持续 整体有等待(IO/锁/网络/大量线程)
    2 top / htop(按 1 查看多核) %Cpu(s):us+sy >80–90%,id<10%,wa/iowait>15–20% CPU 计算 / 磁盘 IO 等待
    3 free -h -w 或 vmstat 1 5 available < 总内存 10–15%,si/so 非零且持续 内存压力 / swap 抖动
    4 iostat -xmdz 1 5 或 iostat -x 1 %util >80–90%(单个盘接近100%),await >10–20ms 磁盘 I/O 饱和
    5 ss -s 或 sar -n DEV 1 5 retransmitted / timeouts / listen drops 非零且高 网络拥塞 / 丢包 / 连接堆积
    6 mpstat 1 5 或 sar -q 1 5 runq-sz(运行队列)持续 > 核数×2,procs.r 高 CPU 饱和 或 严重锁/调度竞争
     

    快速判断口诀负载高 → top看 wa/iowait → free看 available → iostat看 %util → ss看重传 → mpstat看 runq-sz

    2. 五类典型瓶颈的特征对比(一眼识别)

     
     
    瓶颈类型 典型 top / htop 画面特征 关键量化指标(粗略阈值) 常见罪魁祸首进程/场景 下一秒确认命令
    CPU 密集 us+sy 持续 80–100%,id 很低,load 高,runq-sz 大 us+sy >80%,runq-sz > 核数×2 循环、正则、加密、压缩、机器学习推理 pidstat -u 1 5 或 top 按 P 排序
    内存压力 available 接近 0,swap used 上升,si/so 非零 available <5–10%,SwapIn/Out >0 且持续 内存泄漏、大对象缓存、缓存挤占、进程 fork 爆炸 vmstat 1、smem -t -k、ps -eo rss,cmd --sort=-rss
    磁盘 I/O wa/iowait 10–50%,%util 高,await/svctm 大 %util >80–90%,await >10–30ms 日志狂写、数据库慢查询、大文件扫描、备份 iotop(需安装)、pidstat -d 1、iostat -x
    网络饱和 CPU/IO 不高,load 高,重传/丢包/连接建立慢 retrans >1–5%、drops 非零、TIME_WAIT 堆积 DDoS、大流量、慢客户端、MTU 不匹配、NAT 瓶颈 ss -m -o state established、sar -n DEV、mtr
    等待/锁竞争 CPU 不高,load 高,大量进程 S/D 状态,runq-sz 不大 大量 futex/epoll_wait/D 状态,runq-sz 正常 数据库锁、文件锁、Redis 单线程、大量阻塞 I/O strace -c -p PID、perf top、bpftrace
     

    3. 推荐的 5–10 分钟定位流程(生产最常用顺序)

    1. 先全局快照:uptime + top/htop(看 wa / id / runq-sz)
    2. 区分计算 vs 等待
      • wa/iowait 高 → 优先磁盘 I/O(iostat -x)
      • us+sy 高,iowait 低 → 优先 CPU(pidstat -u)
      • 两者都不高但 load 高 → 优先等待/锁(看进程状态)
    3. 检查内存真实压力:free -h 重点看 available 而非 used(Linux 会把空闲内存用作 page cache)
    4. 网络快速扫一眼:ss -s 看 retrans / timeouts,sar -n DEV 看是否达到带宽上限
    5. 锁定前几名耗资源进程
      • CPU:top 按 P 或 pidstat -u
      • 内存:top 按 M 或 ps --sort=-rss
      • IO:iotop 或 pidstat -d
      • 文件描述符多:lsof | awk '{print $2}' | sort | uniq -c | sort -nr

    4. 新手常见误判与纠正

    • 误判:load 很高就以为 CPU 忙 → 很多时候 load 高是因为等待 IO/锁/网络
    • 误判:内存 used 接近 100% 就 panic → 看 available 列;page cache 占用是正常的
    • 误判:单个进程 CPU 100% 就优化它 → 先确认是否业务高峰正常现象
    • 误判:磁盘 %util 低就没 IO 问题 → 单个盘低但 await 高,也可能是慢盘或随机 IO

    正确心态“先用数字证明瓶颈类型,再找具体进程/配置”

    5. 强烈建议安装的快速工具(一行命令搞定)

    • Ubuntu/Debian:sudo apt install htop sysstat iotop iftop glances btop
    • Rocky/Alma/Fedora:sudo dnf install htop sysstat iotop iftop glances btop

    其中 glances(一屏概览所有资源)与 btop(现代美观版 top)特别适合快速判断。

    总结:初步判断的核心思维模型

    1. 全局优先:uptime / top / free / iostat 先跑一遍
    2. 资源分类:CPU 计算 / 内存压力 / 磁盘等待 / 网络拥塞 / 锁与阻塞
    3. 量化说话:用 %util、await、available、retrans、runq-sz 等硬指标
    4. 对比基线:正常时这些值大概多少?现在差多少倍?
    5. 确认后再深挖:perf、strace、火焰图、慢查询日志、应用 profiling

    用这套方法,大部分线上“服务器变慢”的问题都能在 10 分钟内明确瓶颈类别,避免盲目调参或加机器。后续再针对性使用 Brendan Gregg 的 USE 方法(Utilization / Saturation / Errors)或 perf/bpftrace 做深度分析。

     

    这是从“会敲 top”到“能快速定位瓶颈”的关键一步。

    联系我们
    返回顶部