欢迎光临
我们一直在努力

Linux 系统负载全面监控指南✨

Linux 系统负载全面监控指南✨

服务器运行久了经常会出现卡顿、响应缓慢的问题,大概率是系统资源负载超标啦🥺。今天带大家完整搞懂 Linux 系统负载含义、查看命令、压力测试工具以及日常监控优化方案,新手也能轻松看懂、上手实操!

一、什么是系统负载平均值?

Linux 内核会以活动请求数的指数移动平均值来表示。📊

  • 活动请求数:运行中进程(R 状态)+ 等待 IO 进程(D 状态)。等待IO包括处于睡眠等待预期磁盘和网络响应的任务。
  • 指数移动平均值是一个数学公式,可以平滑趋势数据的高值和低值,更加准确地表示一段时间内系统负载,并确定系统负载是随着时间增加还是减少。
  • 根据所有CPU活动请求数,每5秒计算一次Load Average。通过汇总这些值,可以得到最近1分钟,5分钟和15分钟内的指数移动平均值。
  • 一些UNIX系统仅考虑CPU使用率或运行队列长度。Linux中负载平均值中还包含了对IO的考量,遇到负载平均值很高但CPU活动很低时,检查磁盘和网络活动。
  • Linux将各个物理CPU核心和微处理器超线程计为独立执行单元。每个独立的执行单元拥有独立的请求队列。
  • 二、查看系统负载常用命令

    2.1 lscpu:查看 CPU 硬件信息

    先确认服务器 CPU 核心数量,才能正确判断负载高低💻

    # 查看CPU
    [liulele@centos7 ~ 18:51:25]$ lscpu
    Architecture: x86_64
    CPU op-mode(s): 32-bit, 64-bit
    Byte Order: Little Endian
    CPU(s): 2
    On-line CPU(s) list: 0,1
    Thread(s) per core: 1
    Core(s) per socket: 1
    座: 2
    NUMA 节点: 1
    厂商 ID: GenuineIntel
    CPU 系列: 6
    型号: 126
    型号名称: Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz
    步进: 5
    CPU MHz: 1497.602
    BogoMIPS: 2995.20
    超管理器厂商: VMware
    虚拟化类型: 完全
    L1d 缓存: 48K
    L1i 缓存: 32K
    L2 缓存: 512K
    L3 缓存: 8192K
    NUMA 节点0 CPU: 0,1
    .....

    重点看输出里的 CPU(s) 参数,代表总逻辑核心数,超线程核心也会单独计数。

    2.2 uptime:快速查看系统负载

    最简单的负载查询命令,一行展示开机时长、在线用户、三段负载值

    1分钟负载、5分钟负载、15分钟负载

    # 查看负载
    [liulele@centos7 ~ 18:51:44]$ uptime
    18:52:40 up 10:06, 1 user, load average: 0.88, 0.94, 0.96

    我们可以手动制造 CPU 压力,观察负载上涨变化:

    # 给系统加负载
    [liulele@centos7 ~ 18:55:29]$ md5sum /dev/zero &
    [1] 11194
    [liulele@centos7 ~ 18:55:52]$ md5sum /dev/zero &
    [2] 11195

    # 等30秒左右
    [liulele@centos7 ~ 18:56:28]$ uptime
    18:56:30 up 10:10, 1 user, load average: 1.79, 1.15, 1.02

    #解决md5sum进程,因为md5sum是反复运行的,需要先杀父进程在杀子进程
    [liulele@centos7 ~ 19:00:27]$ ps -ef|grep md5sum
    liulele 11195 11113 73 18:55 pts/1 00:03:25 md5sum /dev/zero
    liulele 11276 11113 0 19:00 pts/1 00:00:00 grep –color=auto md5sum

    [liulele@centos7 ~ 19:00:33]$ kill 11113 11195
    [liulele@centos7 ~ 19:00:46]$ ps -ef|grep md5sum
    liulele 11278 11113 0 19:00 pts/1 00:00:00 grep –color=auto md5sum

    负载数值解读逻辑

    系统 CPU 核心数是判断负载是否过载的基准:

    举个例子:服务器为 4 核 CPU

    负载数据:2.92, 4.48, 5.20

    平均单核心负载:0.73(2.92/4) 1.12(4.48/4) 1.30(5.20/4)

    行业理想负载标准:单核心 75% 左右为健康状态✅

    lscpu:查看CPU
    top:查看为什么负载高
    Uptime:查看系统负载
    负载高不高:负载数/cpu内核个数>1 就高 <1 就充足

    • 负载<核心数:系统资源充足,运行流畅

    • 负载≈核心数:资源打满,刚好饱和

    • 负载>核心数:任务排队,服务器卡顿、响应延迟

    负载三大时间维度含义

    • 1 分钟负载:反映系统即时压力,突发波动看它
    • 5 分钟负载:短期平均负载,判断临时峰值
    • 15 分钟负载:长期运行状态,判断系统常态压力

    2.3 top:动态实时监控进程与资源🌟

    top 是运维最常用的实时监控工具,自动刷新,一站式查看任务状态、CPU、内存、进程占用。

    在这里插入图片描述

    top整体结构输出解释

    系统摘要区(前 5 行)字段解释

    top10:20:30 up 12 days, 2:30, 2 users, load average: 0.15, 0.20, 0.10
    Tasks: 230 total, 1 running, 229 sleeping, 0 stopped, 0 zombie
    %Cpu(s): 1.2 us, 0.5 sy, 0.0 ni, 98.0 id, 0.2 wa, 0.0 hi, 0.1 si, 0.0 st
    MiB Mem : 7982.4 total, 1234.5 free, 4567.8 used, 2180.1 buff/cache
    MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 3012.3 avail Mem

    第 1 行:系统时间、运行时长、负载(同 uptime)

    • 10:20:30:当前系统时间
    • up 12 days, 2:30:系统已运行时间
    • 2 users:当前登录用户数
    • load average: 0.15, 0.20, 0.10:1 分钟、5 分钟、15 分钟平均负载(等待 CPU 的任务队列长度)

    第 2 行:进程统计(Tasks)

    • 230 total:系统总进程数
    • 1 running:正在运行(R 态)进程数
    • 229 sleeping:睡眠(S 态)进程数
    • 0 stopped:暂停 / 停止进程数
    • 0 zombie:僵尸进程数(Z),非 0 要排查

    第 3 行:CPU 整体占用(% Cpu (s))

    • us:用户空间 CPU 占比(普通用户进程)
    • sy:内核空间 CPU 占比(系统调用、内核线程)
    • ni:nice 调整过优先级的用户进程占比
    • id:空闲 CPU 占比,越大越闲
    • wa:IO 等待占比,高 = 磁盘 / 网络瓶颈 (cpu等待磁盘启动的时间)
    • hi:硬中断(Hardware IRQ)占比
    • si:软中断(Software IRQ)占比
    • st:被虚拟机偷走的 CPU(steal),物理机一般 0

    第 4 行:物理内存(Mem)

    单位:MiB(或 KiB,视版本)

    • total:总物理内存
    • free:完全空闲内存
    • used:已用内存(含进程 + 内核 + 缓存)
    • buff/cache:缓冲区 + 文件缓存,可回收,不算真正占用

    第 5 行:交换分区(Swap)+ 可用内存

    • total:Swap 总大小
    • free:Swap 剩余
    • used:Swap 已用,持续上涨 = 物理内存不足
    • avail Mem:实际可用内存(free + 可回收 cache),最有参考价值

    进程列表区(各列)完整解释

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

    PID:进程唯一 ID(kill PID 杀进程)

    USER:进程所属用户名

    PR:调度优先级,越小越优先;rt= 实时优先级

    NI:nice 值,-20~19;负 = 高优先级,正 = 低优先级

    VIRT:虚拟内存(KB)

    进程申请的地址空间,含代码、数据、共享库、swap;不等于实际物理内存

    RES:常驻物理内存(KB)

    进程实际占用、未被 swap 出去的物理内存(关键指标)

    SHR:共享内存(KB)

    与其他进程共享的库 / 内存段

    S:进程状态

    • R:运行中(Running)
    • S:可中断睡眠(Sleeping,等待事件)
    • D:不可中断睡眠(通常 IO 阻塞)
    • T:暂停 / 跟踪(Stopped)
    • Z:僵尸进程(Zombie,需回收)

    %CPU:CPU 使用率(多核可 > 100%)

    %MEM:物理内存占比(RES / 总内存)

    TIME+:累计 CPU 时间(1/100 秒精度)

    COMMAND:进程启动命令 / 程序名

    高频实用快捷键(记好超省事!)

    常用的命令:数字1,P,M,k,q,h

    在这里插入图片描述

    三、stress 压力测试工具:模拟高负载场景🧪

    Linux 中的 stress 工具用于对系统进行压力测试,可模拟 CPU、内存、I/O 和磁盘等资源的高负载状态。通过指定参数(如 -c 压 CPU、-m 压内存)可创建负载,帮助发现系统在压力下的稳定性问题,常用于性能调优或硬件验证。

    3.1 安装工具(CentOS7)

    [liulele@centos7 ~ 10:27:15]$ sudo yum install -y stress

    3.2 基础参数说明

    参数作用
    -c N 模拟 N 个 CPU 满载进程
    -m N 模拟 N 个内存占用进程
    –vm-bytes 指定单次占用内存大小
    -d N 模拟 N 个磁盘 IO 读写进程
    –timeout N 压力测试持续 N 秒后自动停止

    3.3 实操案例

    案例 1:CPU 压力测试(占满 2 核 CPU)

    # 可以stress –help查看
    # -c是CPU ,进行两个cpu压测
    [liulele@centos7 ~ 10:28:15]$ stress -c 2
    stress: info: [4257] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd

    在这里插入图片描述

    新开终端执行 top,能看到两个 stress 进程 CPU 占用 100%,系统负载同步飙升。

    案例 2:内存压力测试(占用 1G 内存)

    # -m :mem 内存 1:1个内存压力进程 –vm-bytes 1G :每个进程占用1GB内存
    [liulele@centos7 ~ 10:31:41]$ stress -m 1 –vm-bytes 1G
    stress: info: [4269] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
    [liulele@centos7 ~ 10:31:41]$ free -m

    在这里插入图片描述

    执行后再次 free -m,会看到 used 内存大幅上涨

    案例 3:磁盘 IO 压力测试

    1). # 消耗磁盘IO
    #-d 1 : =(-hdd 1) :启动1个磁盘压力进程
    # –hdd-bytes 2G : 每个进程每次写2GB的临时文件
    [liulele@centos7 ~ 10:35:09]$ stress -d 1 –hdd-bytes 2G
    stress: info: [4308] dispatching hogs: 0 cpu, 0 io, 0 vm, 1 hdd

    # 监视活动状态百分比,%util
    # sysstat :系统性能监控工具集,包含常有的命令:
    #iostat:监控磁盘的I/O、CPU负载
    #mpstat:查看多核CPU状态
    #sar:系统综合性能统计,历史负载查询
    # iotop:磁盘 I/O 专属监控工具
    [liulele@centos7 ~ 10:35:09]$ yum install -y sysstat iotop
    # 监控磁盘读写速度,重点关注rd_sec/s和wr_sec/s,单位是0.5k/每秒,每个sec(sector)是512Byte。
    # sar:统计系统性能数据 -d:只输出磁盘I/O统计 -p:易读的设备名(如 sda、sdb) 1:1:采样间隔 1 秒
    [liulele@centos7 ~ 10:35:09]$ sar -dp 1

    2).# 监控进程读写:左右方向键调整排序列,'>' 代表当前排序列
    [liulele@centos7 ~ 10:35:09]$ iotop

    监控磁盘读写,重点关注rd_sec/s和wr_sec/s,单位是0.5k/每秒,每个sec(sector)是512Byte。

    在这里插入图片描述

    监控进程读写:左右方向键调整排序列,‘>’ 代表当前排序列

    在这里插入图片描述

    重点观察输出里的%util,数值接近 100% 代表磁盘 IO 打满。

    四、网络负载监控

    大文件传输、带宽跑满也会拖慢服务器响应,用 sar 监控网卡流量📡

    # 传送一个大size的文件
    [liulele@centos7 ~ 10:35:09]$ wget http://192.168.50.200/course-materials/iso/CentOS-7-x86_64-DVD-2207-02.iso
    # 监控带宽
    #sar -n:网络
    [liulele@centos7 ~ 10:35:09]$ sar -n DEV 1
    ......
    14时29分07秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
    14时29分08秒 ens32 69961.00 5404.00 96338.71 513.95 0.00 0.00 0.00
    14时29分08秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
    14时29分08秒 virbr0-nic 0.00 0.00 0.00 0.00 0.00 0.00 0.00
    14时29分08秒 virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
    ......

    rxkB/s:接收流量,txkB/s:发送流量,数值持续走高代表带宽占用严重。

    测试方式:内网下载大镜像文件,同步观察流量指标变化。

    五、Linux 系统监控完整运维建议📝

    1. 实时快速排查(单机临时查看)

    日常排查卡顿优先用这组命令:

    • CPU / 进程:top、htop
    • 磁盘 IO:iostat、sar -dp 1
    • 内存:free -h
    • 网络:sar -n DEV 1

    2. 长期集群监控方案

    如果管理多台服务器,手动输入命令效率太低,推荐专业监控平台:

    • Prometheus + Grafana:轻量、自定义可视化图表,适合云服务器
    • Zabbix:传统全能监控,自带告警、模板,中小企业常用
    • Nagios:极简轻量,侧重服务存活告警

    3. 配置告警阈值,提前规避故障

    提前设置指标警戒线,资源超标自动推送通知(邮件 / 企业微信 / 钉钉):

    • CPU:持续 5 分钟占用>80% 触发告警
    • 磁盘:剩余空间不足 10% 告警
    • 内存:可用内存低于 20% 告警
    • IO:磁盘 util 持续 90% 以上告警

    4. 配套监控优化小点

  • 进程巡检:定期查看 Nginx、MySQL 等核心服务进程,异常崩溃及时排查日志;
  • 日志管理:统一收集系统日志 / 应用日志,使用 ELK 栈分析 ERROR 报错;
  • 硬件健康:用 smartctl 检测磁盘坏道,提前规避硬件故障;
  • 流量安全监控:ss/netstat 查看异常连接,配合 tcpdump 抓包排查攻击;
  • 记录性能基线:服务器空闲时记录负载、内存、带宽基准值,后续指标偏离基线快速定位问题。
  • 结尾

    系统负载是运维判断服务器健康度最直观的指标之一,分清 CPU 负载和 IO 负载的区别,配合 stress 工具做压力测试,再搭配监控告警,就能轻松搞定服务器性能运维啦🥳!

    赞(0)
    未经允许不得转载:171主机测评 » Linux 系统负载全面监控指南✨
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址