0 前言
在系统安全检查中,通常要收集进程、内存、IO等信息。Linux提供了功能众多的命令来获取这些信息。今天我们先研究vmstat命令。
1.vmstat命令的功能、用法、选项说明和注意事项
1.1 vmstat命令的功能
vmstat是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可以对系统的进程情况、内存使用情况、交换页和 I/O 块使用情况、中断以及 CPU 使用情况进行统计并报告相应的信息。
我们可以使用命令vmstat --help 来查看 vmstat命令的帮助信息。
1.2 vmstat命令的用法
vmstat [选项] [刷新延时 [刷新次数]]
1.3 vmstat命令的选项说明
选项 | 说明 |
-a --active | 活动/非活动内存 |
-f --forks | 显示自启动以来的 fork 数量 fork是任何在保持活动状态的同时生成另一个进程的进程。 这里的 fork 数量包括 fork、vfork 以及 clone 等系统调用! |
-m --slabs | slabinfo |
-n --one-header | 不重新显示标头 |
-s --stats | 事件计数器统计 |
-d ---disk | 磁盘统计信息 |
-D --disk-sum | 汇总磁盘统计信息 |
-p --partition <dev> | 分区特定统计信息 |
-S --unit <char> | 定义输出的结果中的显示单位, 内存数据的单位默认是 KB,可以通过 -S 选项调整显示的单位,有下面几种单位可供选择:
注意:-S 选项对 si、 so 字段无效 |
-w --wide | 宽输出 vmstat 结果中的某些字段的数字有时会比较长,而且跟字段名的位置有偏差, 不太适合人类的观看习惯, |
-t --timestamp | 显示时间戳 |
-h --help | 显示此帮助并退出 |
-V --version | 输出版本信息并退出 |
1.4 注意事项
- 运行 vmstat 不须要特别的使用权限
- 这些系统信息是用来向用户提供分析系统瓶颈问题信息的。
- linux在计算进程情况时不将正在运行的 vmstat 自己计算进去。
- 当前所在的 linux 块的大小都是 1K,而 CD-ROM 文件系统的块大小为 2K。
- 对于 slabinfo,需要使用 -m 命令行选项。请注意,您的 Linux 发行版内核需要支持 slabinfo 才能使用此选项。如果支持,则您需要使用 sudo 权限运行该命令。
2 vmstat命令实例
2.1 vmstat : 显示当前进程、内存、虚拟内存、读写、系统、cpu 信息
命令执行后返回的信息包括 procs(进程)、memory(内存)、swap(交换分区 或 虚拟内存)、io(磁盘读/写)、system(系统)、cpu 共6个部分内容。
每个部分的含义如下:
字段 | 含义 |
procs |
此数由 linux 计算得出,但 linux 并不耗尽交换空间 这里的不可中断是指 一个进程在执行某些系统调用时进入的状态,在这种状态下,进程被阻塞,并且不能被中断,直到完成系统调用! |
memory |
|
swap |
|
io |
|
system |
|
cpu |
|
2.2 vmstat -a : 显示活动/非活动内存
我们对比执行vmstat 和 vmstat -a 命令返回的信息,可以看到, vmstat -a 命令返回的memory部分中,原来属于buff和cache的位置 显示了 inact 和 active 两个信息。
2.3 vmstat -d:显示磁盘统计信息
命令返回信息包括 disk(磁盘名称)、reads(读)、writes(写)、IO(输入输出)四部分内容,具体说明如下:
字段 | 含义 |
disk |
|
reads |
|
writes |
|
IO |
|
2.4 vmstat -D:汇总磁盘统计信息
信息 | 说明 |
2 disks | 磁盘数 |
5 partitions | 分区数 |
5720 total reads | 读取数据块数 |
2258 merged reads | 分组读取(产生一个 IO)数 |
678240 read sectors | 读取的扇区个数 |
7088 milli reading | 读取时间,毫秒 |
9303 writes | 写入的数据块数 |
43535 merged writes | 分组写入(产生一个 IO)数 |
3141200 written sectors | 已写的扇区个数 |
205722 milli writing | 写入时间,毫秒 |
0 inprogress IO | 进行中的IO个数 |
10 milli spent IO | IO花费的时间,毫秒 |
2.5 vmstat -f:显示自启动以来的 fork 数量
可见,自启动以来的 fork 数量为1391。
2.6 vmstat -p /dev/vda1: 查看分区/dev/vda1的信息
我们先使用lsblk命令查看当 前系统中的分区信息,然后指定查看分区/dev/vda1的信息。
命令返回的分区/dev/vda1的信息含义如下:
信息 | 含义 |
vda1 | 分区名称 |
reads 14 | 读取的数据块数 |
read sectors 112 | 读取的扇区数 |
writes 0 | 写入的数据块数 |
requested writes 0 | 请求写入的数据块数 |
2.7 vmstat -s:显示事件计数器统计信息
返回信息的含义如下:
信息 | 含义 |
3855940 K total memory | 内存总数 |
277356 K used memory | 已使用内存数 |
88576 K active memory | 活跃内存数 |
1567116 K inactive memory | 非活跃内存数 |
2004888 K free memory | 未分配使用内存数 |
40140 K buffer memory | 缓存I/O操作的内存容数 |
1533556 K swap cache | 缓存文件系统数据块的内存数 |
0 K total swap | 虚拟内存总数 |
0 K used swap | 已使用虚拟内存数 |
0 K free swap | 未分配使用虚拟内存数 |
2455 non-nice user cpu ticks | 非友好用户占用的CPU时间 |
0 nice user cpu ticks | 友好用户占用的CPU时间 |
1125 system cpu ticks | 系统占用的CPU时间 |
122725 idle cpu ticks | 空闲的CPU时间 |
949 IO-wait cpu ticks | 等待IO操作的占用的CPU时间 |
142 IRQ cpu ticks | (来自设备的)硬中断请求占用的CPU时间 |
69 softirq cpu ticks | 软中断请求占用的CPU时间 |
0 stolen cpu ticks | 虚拟机盗用的 CPU 百分比 |
340856 pages paged in | 块设备数据的读入内存的页数 |
1580340 pages paged out | 写入块设备的内存页数 |
0 pages swapped in | 从块设备swap区中读入的页数 |
0 pages swapped out | 从块设备swap区中读出的页数 |
534656 interrupts | 中断数 |
930534 CPU context switches | CPU上下文切换次数 |
1721145727 boot time | 系统运行时间 |
1272 forks | fork数 |
2.8 vmstat -t -w:宽行显示时间戳
返回的命令执行结果中增加了timestamp的内容。
我们也可以从对比中看到-w选项的作用。
2.9 vmstat -S M -t 1 3 :以M为单位,延迟1秒输出3次,带时间戳
从时间戳可以看出来,命令每隔1秒钟显示一次信息。