Linux系统负载全方位监控+压力测试实战(运维必备)
日常运维工作中,系统负载、CPU、内存、磁盘IO、网络带宽是排查服务器性能问题的核心指标。很多新手只看懂负载数值,却不懂负载原理、不会压测复现、不会故障排查。本文从零讲解Linux系统负载核心原理、监控命令、stress压力测试工具,手把手搞定系统监控,适合运维入门。
一、系统负载核心原理详解
Linux系统负载平均值(Load Average)是评判服务器繁忙程度的核心指标,由内核通过活动请求数的指数移动平均值计算得出,和普通UNIX系统的负载统计逻辑有明显区别。
1.1 核心统计规则
活动请求数范围更广:不仅包含运行中进程(R状态),还包含等待IO的进程(D状态),涵盖磁盘、网络响应等待的任务,这是Linux负载的核心特点。
指数移动平均值:平滑瞬时峰值、谷值数据,规避单次波动干扰,精准反映一段时间内的系统负载趋势。
计算频率与维度:内核每5秒统计一次全局CPU活动请求数,最终输出1分钟、5分钟、15分钟的负载平均值。
区别于其他UNIX系统:多数UNIX仅统计CPU使用率、运行队列长度,Linux额外纳入IO负载。负载高但CPU空闲时,优先排查磁盘、网络IO瓶颈。
CPU核心计数规则:物理核心、超线程均被视为独立执行单元,每个单元拥有独立请求队列,负载解读需结合核心数计算。
1.2 负载数值解读标准
负载数值不能单独看,必须结合CPU核心总数判断,核心公式:单核心负载 = 总负载值 / CPU核心数。
示例:4核心CPU,负载值为 2.92、4.48、5.20
单核心负载分别为:0.73、1.12、1.30
最佳负载阈值:单核心负载75%左右为稳定理想值;持续超100%说明CPU过载,存在任务排队拥堵。
二、基础负载查看命令实操
2.1 lscpu 查看CPU硬件信息
用于查询服务器CPU核心数、线程数、架构等基础信息,是负载解读的前置操作。
[fangbing@centos7 ~16:59:38]$ lscpu Architecture: x86_64 CPU op-mode(s):32-bit,64-bit Byte Order: Little Endian CPU(s):2#总CPU核心数是2On-line CPU(s)list:0,1Thread(s)per core:1Core(s)per socket:1座:2NUMA 节点:1厂商 ID: GenuineIntel CPU 系列:6型号:170型号名称: Intel(R)Core(TM)Ultra5125H 步进:4CPU MHz:2995.206BogoMIPS:5990.412.2 uptime 快速查看系统负载
一键查看服务器运行时长、在线用户数、1/5/15分钟负载平均值,是运维高频快捷命令。
# 初始低负载状态[fangbing@centos7 ~17:15:04]$uptime17:18:59 up19min,1user, load average:0.00,0.01,0.03# 后台md5sum循环计算占用CPU资源,快速制造系统负载,用于测试监控效果[fangbing@centos7 ~17:18:59]$ md5sum /dev/zero&[1]2438[fangbing@centos7 ~17:19:36]$ md5sum /dev/zero&[2]2439[fangbing@centos7 ~17:19:38]$uptime17:21:37 up22min,1user, load average:2.04,0.75,0.29负载解读:
服务器逻辑 CPU 总数:2 核
uptime 负载:load average: 2.04, 0.75, 0.29
三个数值:1 分钟、5 分钟、15 分钟平均负载
计算公式:单核心平均负载 = 负载数值 ÷ 逻辑 CPU 数量
- 1 分钟负载:
2.04 ÷ 2 = 1.02 - 5 分钟负载:
0.75 ÷ 2 = 0.375 - 15 分钟负载:
0.29 ÷ 2 = 0.145
注意说明短期内单核心负载略微超过 1,代表CPU 资源已经打满,新任务开始排队等待调度。
三、top动态进程监控工具
top是Linux核心实时监控工具,可动态查看进程状态、任务数量、CPU/内存占用、负载状态,是运维排查故障的必备工具。
3.1 top常用快捷键(运维必记)
1:展开所有CPU核心,查看单核心负载状态
u:过滤用户
P:按CPU使用率从高到低排序进程
M:按内存使用率从高到低排序进程
k:输入PID,终止指定异常进程
q:退出top监控界面
shift+w:写入保存当前的显示配置,以便下次重新启动时再使用
h:查看top帮助文档
四、stress专业压力测试工具
stress是Linux专用压力测试工具,可精准模拟CPU、内存、磁盘IO、磁盘读写高负载场景,用于测试服务器稳定性、性能阈值,适配性能调优、硬件验证、故障复现场景。
4.1 工具安装与帮助文档
# CentOS7安装stress[root@centos7 ~18:12:09]# yum install -y stress# 查看全部参数说明[root@centos7 ~18:13:52]# stress --help`stress' imposes certain types of compute stress on your system Usage: stress[OPTION[ARG]]... -?,--helpshow thishelpstatement--versionshow version statement -v,--verbosebe verbose -q,--quietbe quiet -n, --dry-run show what would have beendone-t,--timeoutNtimeoutafter N seconds--backoffNwaitfactor of N microseconds before work starts -c,--cpuN spawn N workers spinning on sqrt()-i,--ioN spawn N workers spinning on sync()-m,--vmN spawn N workers spinning on malloc()/free()--vm-bytes B malloc B bytes per vm worker(default is 256MB)--vm-stride Btoucha byte every B bytes(default is4096)--vm-hang NsleepN secs beforefree(default none,0is inf)--vm-keep redirty memory instead of freeing and reallocating -d,--hddN spawn N workers spinning on write()/unlink()--hdd-bytes BwriteB bytes per hdd worker(default is 1GB)Example: stress--cpu8--io4--vm2--vm-bytes 128M--timeout10s Note: Numbers may be suffixed with s,m,h,d,y(time)or B,K,M,G(size).核心参数说明:
-c:指定CPU压测进程数,占用核心算力
-m:指定内存压测进程数,配合--vm-bytes指定占用内存大小
-d:指定磁盘压测进程数,模拟磁盘读写IO负载
-t:指定压测超时时间,自动结束任务
-i:模拟系统IO调度压力
4.2 场景1:CPU压力测试
启动2个CPU压测进程,打满CPU算力,通过top实时监控负载变化。
# 占用2核CPU进行压测[root@centos7 ~18:14:00]# stress -c 2stress: info:[3786]dispatching hogs:2cpu,0io,0vm,0hdd# 新开终端执行top监控[root@centos7 ~18:16:09]# toptop-18:17:00 up1:17,3users, load average:1.52,0.45,0.19Tasks:190total,3running,187sleeping,0stopped,0zombie %Cpu(s):99.2us,0.8sy,0.0ni,0.0id,0.0wa,0.0hi,0.0si,0.0st KiB Mem:4026124total,3043064free,521136used,461924buff/cache KiB Swap:4063228total,4063228free,0used.3254380avail Mem PIDUSERPR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND3788root20073121000R100.00.01:00.97 stress3787root20073121000R99.70.01:00.76 stress1602root2003216283697228328S0.30.90:00.37 X1root20019391669964196S0.00.20:01.46 systemd2root200000S0.00.00:00.00 kthreadd4root0-20000S0.00.00:00.00 kworker/0:0H6root200000S0.00.00:00.07 ksoftirqd/04.3 场景2:内存压力测试
手动指定占用内存大小,模拟内存高负载场景,通过free命令对比压测前后内存占用。
# 压测前查看内存[root@centos7 ~18:18:08]# free -mtotal usedfreeshared buff/cache available Mem:39315082972274513179Swap:396703967# 启动1个内存进程,占用1G内存[root@centos7 ~18:18:21]# stress -m 1 --vm-bytes 1Gstress: info:[3916]dispatching hogs:0cpu,0io,1vm,0hdd# 新开1个终端看压测后内存,已成功占用指定内存,[root@centos7 ~18:19:41]# free -mtotal usedfreeshared buff/cache available Mem:393115301949274512156Swap:396703967字段解析:
| 字段 | 中文解释 |
|---|---|
| total | 总内存大小,服务器物理内存总量。 |
| used | 已经被程序、系统占用的内存。 |
| free | 完全空闲、没被任何程序使用的裸内存。 |
| shared | 多个进程共享占用的内存。 |
| buff/cache | 缓冲区 + 页缓存。Linux 会利用空闲内存缓存磁盘文件,提升读写速度;内存紧张时可以快速回收这部分内存给应用程序。 |
| available(重点) | 运维判断内存优先看该指标。系统预估可以分配给新进程、无需 Swap 交换就能使用的内存总量;计算公式:available = free + 可回收的 buff/cache - 不可回收内存 |
4.4 场景3:磁盘IO压力测试
模拟磁盘高频读写,制造IO负载,通过sar命令监控磁盘利用率(%util)。
# 安装磁盘监控工具[root@centos7 ~18:22:22]# yum install -y sysstat iotop# 启动磁盘压测,单次写入2G文件[root@centos7 ~18:20:28]# stress -d 1 --hdd-bytes 2Gstress: info:[3988]dispatching hogs:0cpu,0io,0vm,1hdd# 监控磁盘读写速度,重点关注rd_sec/s和wr_sec/s,单位是0.5k/每秒,每个sec(sector)是512Byte,还有%util[root@centos7 ~18:24:24]# sar -dp 118时24分53秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util18时24分54秒 sda2852.480.002919920.791023.6464.1022.470.3084.85# 动态监控,左右方向键调整排序列,'>' 代表当前排序列[root@centos7 ~18:24:59]# iotopTotal DISK READ:0.00B/s|Total DISK WRITE:51.90M/s Actual DISK READ:0.00B/s|Actual DISK WRITE:62.16M/s TID PRIOUSERDISK READ DISK WRITE>SWAPIN IO COMMAND4573be/4 laoma0.00B/s51.90M/s0.00%96.45% stress-d1--hdd-bytes 2G1be/4 root0.00B/s0.00B/s0.00%0.00% systemd --switched-root--system--deserialize22字段解析:
| 字段 | 中文说明 |
|---|---|
| DEV | 磁盘设备名称(如 sda) |
| tps | 每秒向磁盘发起的 IO 请求次数(一次读写合并算 1 次) |
| rd_sec/s | 每秒读取扇区数量,1 扇区 = 512 字节 |
| wr_sec/s | 每秒写入扇区数量,1 扇区 = 512 字节 |
| avgrq-sz | 单次 IO 请求的平均扇区大小(反映读写块大小) |
| avgqu-sz | 磁盘 IO 请求队列平均长度,队列越长,阻塞越严重 |
| await | IO 请求平均等待时间(单位 ms),包含队列等待 + 磁盘处理耗时 |
| svctm | IO 请求磁盘实际处理耗时(单位 ms),新版内核该指标已失效,不要参考 |
| %util | 磁盘设备繁忙时间占比,接近 100% 代表磁盘 IO 瓶颈 |
五、网络负载压力测试
通过下载大体积镜像文件模拟网络带宽负载,搭配sar工具实时监控网卡流量、带宽利用率。
# 下载CentOS镜像制造网络负载(原资源URL失效,可替换可用镜像源测试)[root@centos7 ~18:31:49]# wget http://192.168.50.200/course-materials/iso/CentOS-7-x86_64-DVD-2207-02.iso# 每秒刷新一次网络设备流量状态[root@centos7 ~18:31:04]# sar -n DEV 118时32分16秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s18时32分17秒 lo0.000.000.000.000.000.000.0018时32分17秒 virbr0-nic0.000.000.000.000.000.000.0018时32分17秒 virbr00.000.000.000.000.000.000.0018时32分17秒 ens3347252.004391.0069838.66258.260.000.000.00字段解析:
| 字段 | 中文含义 |
|---|---|
| IFACE | 网卡设备名称 |
| rxpck/s | 每秒接收数据包数量 |
| txpck/s | 每秒发送数据包数量 |
| rxkB/s | 每秒接收流量,单位:KB / 秒 |
| txkB/s | 每秒发送流量,单位:KB / 秒 |
| rxcmp/s | 每秒接收压缩数据包(普通业务基本为 0) |
| txcmp/s | 每秒发送压缩数据包(普通业务基本为 0) |
| rxmcst/s | 每秒接收组播数据包 |
六、Linux系统监控最佳实践总结
结合日常运维场景,整理10条核心监控规范,覆盖性能排查、预警、安全、自动化全维度:
核心指标实时监控:重点跟踪CPU用户/系统占比、内存/swap使用率、磁盘IOPS/吞吐量、网络带宽与连接数,使用top、vmstat、iostat快速排查。
部署专业监控平台:集群/长期监控推荐Prometheus+Grafana可视化监控、Zabbix全功能告警、Nagios轻量监控。
配置阈值告警:CPU持续5分钟超80%、磁盘空间不足10%、内存过载等场景配置告警,开启告警合并避免风暴。
常态化进程服务监控:定期检查Nginx、MySQL等核心服务状态,排查异常进程、僵尸进程,通过日志定位崩溃原因。
日志集中管理:整合系统日志、应用日志,通过ELK栈分析错误日志、异常登录、磁盘故障信息。
磁盘健康监控:除空间外,通过smartctl检测磁盘坏块,空闲时执行fsck校验文件系统完整性。
网络安全监控:通过ss/netstat排查异常端口、高频陌生IP访问,结合tcpdump抓包分析可疑流量。
建立性能基线:记录服务器正常空载、负载基线,指标偏离时及时排查潜在故障。
自定义自动化监控:编写Shell/Python脚本,适配个性化监控需求,定时巡检并触发告警。
监控权限安全管控:最小化监控工具权限,加密监控数据传输,避免监控系统成为安全漏洞。
合系统日志、应用日志,通过ELK栈分析错误日志、异常登录、磁盘故障信息。磁盘健康监控:除空间外,通过smartctl检测磁盘坏块,空闲时执行fsck校验文件系统完整性。
网络安全监控:通过ss/netstat排查异常端口、高频陌生IP访问,结合tcpdump抓包分析可疑流量。
建立性能基线:记录服务器正常空载、负载基线,指标偏离时及时排查潜在故障。
自定义自动化监控:编写Shell/Python脚本,适配个性化监控需求,定时巡检并触发告警。
监控权限安全管控:最小化监控工具权限,加密监控数据传输,避免监控系统成为安全漏洞。