从零学会服务器状态监控,日常运维必备
监控系统负载
系统负载介绍
系统负载平均值:Linux内核以活动请求数的指数移动平均值来表示。
- 活动请求数不仅包含运行中进程,还包含等待IO的进程,对应于R和D。等待IO包括处于睡眠等待预期磁盘和网络响应的任务。
- 指数移动平均值是一个数学公式,可以平滑趋势数据的高值和低值,更加准确地表示一段时间内系统负载,并确定系统负载是随着时间增加还是减少。
- 根据所有CPU活动请求数,每5秒计算一次Load Average。通过汇总这些值,可以得到最近1分钟,5分钟和15分钟内的指数移动平均值。
- 一些UNIX系统仅考虑CPU使用率或运行队列长度。Linux中负载平均值中还包含了对IO的考量,遇到负载平均值很高但CPU活动很低时,检查磁盘和网络活动。
- Linux将各个物理CPU核心和微处理器超线程计为独立执行单元。每个独立的执行单元拥有独立的请求队列。
查看系统负载
# 查看CPU[cyw@centos7 ~16:46:42]$ 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型号:158型号名称: Intel(R)Core(TM)i5-7300HQ CPU @2.50GHz 步进:9CPU MHz:2496.000BogoMIPS:4992.00超管理器厂商: VMware 虚拟化类型: 完全 L1d 缓存: 32K L1i 缓存: 32K L2 缓存: 256K L3 缓存: 6144K...# 查看负载[cyw@centos7 ~16:52:01]$uptime16:52:18 up3:25,4users, load average:0.00,0.15,0.82# 给系统加负载[cyw@centos7 ~16:53:05]$ md5sum /dev/zero&[1]11840[cyw@centos7 ~16:53:17]$ md5sum /dev/zero&[2]11841# 等30秒左右[cyw@centos7 ~16:54:08]$uptime16:54:18 up3:27,4users, load average:1.24,0.45,0.84负载解读
示例:4核心的CPU
- 负载为: 2.92 4.48 5.20
- 每个cpu负载为:0.73(2.92/4) 1.12(4.48/4) 1.30(5.20/4)
比较理想的值为 75% 左右。
top 命令
作用:动态查看进程信息,包括不同状态任务数量,CPU消耗和内存消耗。
top命令快捷键
常用的命令:数字1,P,M,k,q,h。
stress 工具
Linux 中的stress工具用于对系统进行压力测试,可模拟 CPU、内存、I/O 和磁盘等资源的高负载状态。通过指定参数(如-c压 CPU、-m压内存)可创建负载,帮助发现系统在压力下的稳定性问题,常用于性能调优或硬件验证。
# 安装[root@centos7 ~ 08:36:25]# yum install -y stress# 查看帮助信息[root@centos7 ~10:14:27]# 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).压力测试-CPU
# 消耗2个CPU[root@centos7 ~10:24:32]# stress -c 2stress: info:[4405]dispatching hogs:2cpu,0io,0vm,0hdd# top 监控[root@centos7 ~10:30:54]# toptop-10:32:49 up2:00,3users, load average:0.10,0.13,0.09Tasks:229total,1running,228sleeping,0stopped,0zombie %Cpu(s):0.2us,0.2sy,0.0ni,99.5id,0.0wa,0.0hi,0.2si,0.0st KiB Mem:4026120total,1903396free,880020used,1242704buff/cache KiB Swap:4063228total,4063228free,0used.2883044avail Mem PIDUSERPR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND4416root20016210023801588R0.70.10:00.43top736root20029556452604040S0.30.10:19.25 vmtoolsd2554cyw2006266722826421548S0.30.70:18.50 vmtoolsd...压力测试-内存
# 消耗前内存[root@centos7 ~10:32:53]# free -mtotal usedfreeshared buff/cache available Mem:393185818592212132816Swap:396703967# 消耗 1G 内存[root@centos7 ~10:33:41]# stress -m 1 --vm-bytes 1Gstress: info:[4444]dispatching hogs:0cpu,0io,1vm,0hdd# 消耗后内存[root@centos7 ~10:34:53]# free -mtotal usedfreeshared buff/cache available Mem:393185718602212132816Swap:396703967压力测试-磁盘
# 消耗磁盘IO[root@centos7 ~10:38:04]# stress -d 1 --hdd-bytes 2Gstress: info:[4490]dispatching hogs:0cpu,0io,0vm,1hdd# 监视活动状态百分比,%util[root@centos7 ~10:38:24]# yum install -y sysstat iotop# 监控磁盘读写速度,重点关注rd_sec/s和wr_sec/s,单位是0.5k/每秒,每个sec(sector)是512Byte。[root@centos7 ~10:39:10]# sar -dp 1Linux3.10.0-1160.71.1.el7.x86_64(centos7.cyw)2026年07月22日 _x86_64_(2CPU)10时39分43秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util10时39分44秒 sr00.000.000.000.000.000.000.000.0010时39分44秒 sda0.000.000.000.000.000.000.000.0010时39分44秒 centos-root0.000.000.000.000.000.000.000.0010时39分44秒 centos-swap0.000.000.000.000.000.000.000.0010时39分44秒 centos-home0.000.000.000.000.000.00...# 监控进程读写:左右方向键调整排序列,'>' 代表当前排序列[root@centos7 ~10:40:16]# iotopTotal DISK READ:0.00B/s|Total DISK WRITE:0.00B/s Actual DISK READ:0.00B/s|Actual DISK WRITE:1974.30B/s TID PRIOUSERDISK READ DISK WRITE SWAPIN IO>COMMAND1be/4 root0.00B/s0.00B/s0.00%0.00% systemd --swit~deserialize222be/4 root0.00B/s0.00B/s0.00%0.00%[kthreadd]4be/0 root0.00B/s0.00B/s0.00%0.00%[kworker/0:0H]6be/4 root0.00B/s0.00B/s0.00%0.00%[ksoftirqd/0]7rt/4 root0.00B/s0.00B/s0.00%0.00%[migration/0]...网络测试
# 传送一个大size的文件[root@centos7 ~10:43:15]# wget http://192.168.50.200/course-materials/iso/CentOS-7-x86_64-DVD-2207-02.iso--2026-07-2210:44:38-- http://192.168.50.200/course-materials/iso/CentOS-7-x86_64-DVD-2207-02.iso 正在连接192.168.50.200:80... 已连接。 已发出 HTTP 请求,正在等待回应...200OK 长度:4746903552(4.4G)[application/octet-stream]正在保存至: “CentOS-7-x86_64-DVD-2207-02.iso”16%[======>]772,700,15428.5MB/s 剩余 6m 37s ^C# 监控带宽[root@centos7 ~10:45:24]# sar -n DEV 1Linux3.10.0-1160.71.1.el7.x86_64(centos7.cyw)2026年07月22日 _x86_64_(2CPU)10时45分38秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s10时45分39秒 lo0.000.000.000.000.000.000.0010时45分39秒 virbr0-nic0.000.000.000.000.000.000.0010时45分39秒 virbr00.000.000.000.000.000.000.0010时45分39秒 ens3327565.001273.0040070.3775.320.000.000.00监控总结
以下是针对 Linux 系统监控的几条实用建议,涵盖关键监控维度和最佳实践:
- 核心指标实时监控重点跟踪 CPU 使用率(用户态 / 系统态占比)、内存占用(含缓存 /swap 使用率)、磁盘 I/O(读写吞吐量、IOPS)和网络流量(带宽利用率、连接数)。可通过
top/htop(实时)、vmstat/iostat(系统级)等工具快速查看。 - 部署专业监控工具对于服务器集群或长期监控需求,建议使用 Prometheus + Grafana(可视化强)、Zabbix(全功能监控)或 Nagios(轻量告警)等工具,实现指标集中收集、趋势分析和历史数据查询。
- 设置关键阈值告警针对核心指标配置告警阈值(如 CPU 持续 5 分钟超 80%、磁盘空间不足 10%),通过邮件、短信或即时通讯工具推送告警,避免故障扩大。注意避免告警风暴(可设置告警合并或延迟)。
- 监控进程与服务状态定期检查关键服务(如 Nginx、MySQL)的运行状态、进程数及资源消耗,可通过
systemctl status或自定义脚本实现。对异常退出的进程,结合日志排查崩溃原因。 - 日志集中管理与分析将系统日志(
/var/log/messages)、应用日志集中存储(如使用 ELK 栈),关注错误信息(ERROR级别)、登录异常(/var/log/auth.log)和磁盘错误(dmesg | grep error),必要时配置日志告警规则。 - 磁盘健康监控除空间使用率外,需关注磁盘坏块(
smartctl工具检测 S.M.A.R.T 信息)和文件系统完整性(定期运行fsck,非挂载状态下),避免硬件故障导致数据丢失。 - 网络与安全监控监控端口开放状态(
netstat/ss)、异常连接(尤其是外部 IP 的高频访问)和防火墙规则生效情况。可结合tcpdump抓包分析可疑流量。 - 定期性能基线分析记录系统正常运行时的指标基线(如平均负载、内存使用峰值),当指标偏离基线时及时排查,避免微小异常累积成故障。
- 自动化监控脚本对个性化需求(如特定目录文件数、应用响应时间),编写 Shell 或 Python 脚本定期执行检查,输出结果至监控系统或直接触发告警。
- 监控权限与安全限制监控工具的权限(如仅授予读取日志和指标的权限),加密传输监控数据,防止监控系统本身成为安全薄弱点。
通过分层监控(基础指标→服务状态→业务性能)和主动预警,可显著提升系统稳定性和故障响应效率。
