1. 首页 > Linux教程 > 正文

Linux教程FG163-vmstat命令系统监控

内容大纲

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。

1. vmstat命令概述

vmstat命令是Linux系统中的虚拟内存统计工具,它可以报告关于进程、内存、分页、块I/O、陷阱和CPU活动的信息。

风哥提示:

# vmstat命令的主要功能
# 进程统计:运行、阻塞、交换的进程数量
# 内存统计:内存使用、缓冲区、缓存
# 交换统计:交换进、交换出
# I/O统计:块设备读写
# 系统统计:中断、上下文切换
# CPU统计:用户、系统、空闲、等待时间

2. vmstat命令基本使用

使用vmstat命令查看系统统计信息。

更多视频教程www.fgedu.net.cn

# vmstat命令基本使用

# 1. 查看系统统计信息
[root@localhost ~]# vmstat
procs ———–memory———- —swap– —–io—- -system– ——cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 4096000 102400 2048000 0 0 0 0 10 20 2 1 96 1 0

# 2. 指定采样间隔和次数
[root@localhost ~]# vmstat 1 3
procs ———–memory———- —swap– —–io—- -system– ——cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 4096000 102400 2048000 0 0 0 0 10 20 2 1 96 1 0
0 0 0 4096000 102400 2048000 0 0 0 0 12 25 3 1 95 1 0
1 0 0 4096000 102400 2048000 0 0 0 0 11 22 2 1 96 1 0

# 3. 显示内存统计信息
[root@localhost ~]# vmstat -s
8589934592 total memory
4294967296 used memory
4294967296 active memory
2147483648 inactive memory
4294967296 free memory
104857600 buffer memory
2147483648 swap cache
4294967296 total swap
0 used swap
4294967296 free swap
0 non-nice user cpu ticks
0 nice user cpu ticks
0 system cpu ticks
0 idle cpu ticks
0 IO-wait cpu ticks
0 IRQ cpu ticks
0 softirq cpu ticks
0 stolen cpu ticks
0 pages paged in
0 pages paged out
0 pages swapped in
0 pages swapped out
0 interrupts
0 CPU context switches
1234567890 boot time
0 forks

# 4. 显示磁盘统计信息
[root@localhost ~]# vmstat -d
disk- ————reads———— ————writes———– —–IO——
total merged ms total merged ms cur sec
sda 100 0 10 50 0 5 0 0
sdb 200 0 20 100 0 10 0 0
sdc 300 0 30 150 0 15 0 0

# 5. 显示分区统计信息
[root@localhost ~]# vmstat -p /dev/sda
sda reads read sectors writes requested writes
total merged total merged ms
sda1 50 0 25 0 5
sda2 50 0 25 0 5
total 100 0 50 0 10

3. vmstat命令

更多学习教程公众号风哥教程itpux_com

参数详解

详解vmstat命令的各个参数。

# vmstat命令参数详解

# 1. 进程统计(procs)
# r:等待运行的进程数
# b:处于不可中断睡眠状态的进程数

# 2. 内存统计(memory)
# swpd:使用的虚拟内存大小
# free:空闲的物理内存大小
# buff:用作缓冲区的内存大小
# cache:用作缓存的内存大小

# 3. 交换统计(swap)
# si:从磁盘交换到内存的速率
# so:从内存交换到磁盘的速率

# 4. I/O统计(io)
# bi:从块设备读取的速率
# bo:写入块设备的速率

# 5. 系统统计(system)
# in:每秒中断数
# cs:每秒上下文切换数

# 6. CPU统计(cpu)
# us:用户空间CPU时间百分比
# sy:内核空间CPU时间百分比
# id:空闲CPU时间百分比
# wa:等待I/O的CPU时间百分比
# st:从虚拟机窃取的CPU时间百分比

# 查看详细参数说明
[root@localhost ~]# vmstat –help
Usage:
vmstat [options] [delay [count]]

Options:
-a, –active active/inactive memory
-f, –forks number of forks since boot
-m, –slabs slabinfo
-n, –one-header do not redisplay header
-s, –stats event counter statistics
-d, –disk disk statistics
-D, –disk-sum summarize disk statistics
-p, –partition partition specific statistics
-S, –unit define display unit
-w, –wide wide mode
-t, –timestamp show timestamp
-h, –help display this help and exit
-V, –version output version information and exit

For more details see vmstat(8).

from PG视频:www.itpux.com

4. vmstat命令高级功能

使用vmstat命令的高级功能。

# vmstat命令高级功能

# 1. 显示活动/非活动内存
[root@localhost ~]# vmstat -a
procs ———–memory———- —swap– —–io—- -system– ——cpu—–
r b swpd free inact active si so bi bo in cs us sy id wa st
1 0 0 4096000 2048000 2048000 0 0 0 0 10 20 2 1 96 1 0

# 2. 显示fork统计
[root@localhost ~]# vmstat -f
1234 forks

# 3. 显示slab信息
[root@localhost ~]# vmstat -m
Cache Num Total Size Pages
dentry 100 200 256 1
inode 50 100 512 1
tcp 25 50 256 1
udp 25 50 256 1

# 4. 显示事件计数器统计
[root@localhost ~]# vmstat -s
8589934592 total memory
4294967296 used memory
4294967296 active memory
2147483648 inactive memory
4294967296 free memory
104857600 buffer memory
2147483648 swap cache
4294967296 total swap
0 used swap
4294967296 free swap
0 non-nice user cpu ticks
0 nice user cpu ticks
0 system cpu ticks
0 idle cpu ticks
0 IO-wait cpu ticks
0 IRQ cpu ticks
0 softirq cpu ticks
0 stolen cpu ticks
0 pages paged in
0 pages paged out
0 pages swapped in
0 pages swapped out
0 interrupts
0 CPU context switches
1234567890 boot time
0 forks

# 5. 显示时间戳
[root@localhost ~]# vmstat -t 1 3
procs ———–memory———- —swap– —–io—- -system– ——cpu—– —–timestamp—
r b swpd free buff cache si so bi bo in cs us sy id wa st CST
1 0 0 4096000 102400 2048000 0 0 0 0 10 20 2 1 96 1 0 2026-04-03 10:00:00
0 0 0 4096000 102400 2048000 0 0 0 0 12 25 3 1 95 1 0 2026-04-03 10:00:01
1 0 0 4096000 102400 2048000 0 0 0 0 11 22 2 1 96 1 0 2026-04-03 10:00:02

# 6. 使用不同单位显示
[root@localhost ~]# vmstat -S M
procs ———–memory———- —swap– —–io—- -system– ——cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 4096 100 2048 0 0 0 0 10 20 2 1 96 1 0

# 7. 宽模式显示
[root@localhost ~]# vmstat -w
procs ———–memory———- —swap– —–io—- -system– ——cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 4096000 102400 2048000 0 0 0 0 10 20 2 1 96 1 0

5. 实战案例

学习交流加群风哥微信: itpux-com

使用vmstat命令监控系统性能。

# 实战案例:使用vmstat命令监控系统性能

# 1. 查看系统统计信息
[root@localhost ~]# vmstat
procs ———–memory———- —swap– —–io—- -system– ——cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 4096000 102400 2048000 0 0 0 0 10 20 2 1 96 1 0

# 2. 持续监控系统状态
[root@localhost ~]# vmstat 1 10
procs ———–memory———- —swap– —–io—- -system– ——cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 4096000 102400 2048000 0 0 0 0 10 20 2 1 96 1 0
0 0 0 4096000 102400 2048000 0 0 0 0 12 25 3 1 95 1 0
1 0 0 4096000 102400 2048000 0 0 0 0 11 22 2 1 96 1 0
0 0 0 4096000 102400 2048000 0 0 0 0 13 24 3 1 95 1 0
1 0 0 4096000 102400 2048000 0 0 0 0 10 21 2 1 96 1 0
0 0 0 4096000 102400 2048000 0 0 0 0 12 23 3 1 95 1 0
1 0 0 4096000 102400 2048000 0 0 0 0 11 22 2 1 96 1 0
0 0 0 4096000 102400 2048000 0 0 0 0 13 24 3 1 95 1 0
1 0 0 4096000 102400 2048000 0 0 0 0 10 21 2 1 96 1 0
0 0 0 4096000 102400 2048000 0 0 0 0 12 23 3 1 95 1 0

# 3. 创建监控脚本
[root@localhost ~]# cat > /usr/local/bin/vmstat-monitor.sh << 'EOF' #!/bin/bash # script.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn # vmstat监控脚本 LOG_FILE="/var/log/vmstat-monitor.log" ALERT_EMAIL="admin@fgedu.net.cn" # 记录日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}

# 检查CPU使用率
check_cpu() {
CPU_IDLE=$(vmstat 1 2 | tail -1 | awk ‘{print $15}’)
CPU_USAGE=$(echo “100 – $CPU_IDLE” | bc)

if [ $(echo “$CPU_USAGE > 80” | bc) -eq 1 ]; then
log “WARNING: CPU usage is ${CPU_USAGE}%”
echo “CPU usage is ${CPU_USAGE}%” | mail -s “WARNING: CPU usage alert” $ALERT_EMAIL
fi
}

# 检查内存使用率
check_memory() {
MEMORY_FREE=$(vmstat 1 2 | tail -1 | awk ‘{print $4}’)
MEMORY_TOTAL=$(free | grep Mem | awk ‘{print $2}’)
MEMORY_USAGE=$(echo “scale=1; ($MEMORY_TOTAL – $MEMORY_FREE) / $MEMORY_TOTAL * 100” | bc)

if [ $(echo “$MEMORY_USAGE > 80” | bc) -eq 1 ]; then
log “WARNING: Memory usage is ${MEMORY_USAGE}%”
echo “Memory usage is ${MEMORY_USAGE}%” | mail -s “WARNING: Memory usage alert” $ALERT_EMAIL
fi
}

# 检查I/O等待
check_io_wait() {
IO_WAIT=$(vmstat 1 2 | tail -1 | awk ‘{print $16}’)

if [ $(echo “$IO_WAIT > 20” | bc) -eq 1 ]; then
log “WARNING: I/O wait is ${IO_WAIT}%”
echo “I/O wait is ${IO_WAIT}%” | mail -s “WARNING: I/O wait alert” $ALERT_EMAIL
fi
}

# 主函数
main() {
log “Starting vmstat monitoring…”
check_cpu
check_memory
check_io_wait
log “Vmstat monitoring completed.”
}

# 执行主函数
main
EOF

# 4. 设置脚本执行权限
[root@localhost ~]# chmod +x /usr/local/bin/vmstat-monitor.sh

# 5. 创建日志文件
[root@localhost ~]# touch /var/log/vmstat-monitor.log
[root@localhost ~]# chmod 644 /var/log/vmstat-monitor.log

# 6. 配置定时任务
[root@localhost ~]# echo “*/5 * * * * root /usr/local/bin/vmstat-monitor.sh” > /etc/cron.d/vmstat-monitor

# 7. 重启cron服务
[root@localhost ~]# systemctl restart crond

# 8. 测试监控脚本
[root@localhost ~]# /usr/local/bin/vmstat-monitor.sh

# 9. 查看日志
[root@localhost ~]# tail -f /var/log/vmstat-monitor.log
[2026-04-03 10:00:00] Starting vmstat monitoring…
[2026-04-03 10:00:05] Vmstat monitoring completed.

# 10. 配置日志轮转
[root@localhost ~]# cat > /etc/logrotate.d/vmstat-monitor << 'EOF' /var/log/vmstat-monitor.log { daily rotate 7 compress delaycompress missingok notifempty create 0644 root root } EOF # 11. 测试日志轮转 [root@localhost ~]# logrotate -f /etc/logrotate.d/vmstat-monitor

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息