说明
vmstat是Virtual Memory Statistics(虚拟内存统计)的缩写,利用该命令可以对操作系统的内存信息、进程状态和CPU活动等进行监视。但是只能对系统的整理情况进行统计,无法对某个进程进行深入的分析。
格式
vmstat [option] [delay时间间隔 [count次数]]
参数说明
- -a:显示活跃和非活跃内存
- -f:显示启动后创建的进程总数;
- -m:显示slab信息;
- -n:头信息仅显示一次;
- -s:以表格方式显示事件计数器和内存状态;
- -d:报告磁盘状态;
- -p:显示指定的硬盘分区状态;
- -S:输出信息的单位,参数有k、K、m、M
- -t:统计信息带上时间戳
示例
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
2 0 25632 75756 0 156272 0 1 15 10 74 155 0 0 99 0 0
[root@localhost ~]#
[root@localhost ~]# vmstat 5 #表示每隔5s就更新一次输出信息
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 25632 75756 0 156272 0 1 15 10 74 155 0 0 99 0 0
0 0 25632 75716 0 156272 0 0 0 0 72 150 0 0 99 0 0
0 0 25632 75716 0 156272 0 0 0 0 74 146 0 1 99 0 0
0 0 25632 75716 0 156272 0 0 0 1 80 158 0 0 99 0 0
^C
[root@localhost ~]# vmstat 5 2 #表示每隔5s就更新一次输出信息,统计2次就退出
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 25632 75756 0 156272 0 1 15 10 74 155 0 0 99 0 0
10 0 25632 75716 0 156272 0 0 0 0 81 157 0 1 99 0 0
字段说明:
Procs(进程)
- r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
- b: 等待IO的进程数量。
Memory(内存)
- swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。
- free: 空闲物理内存大小。
- buff: 用作缓冲的内存大小。
- cache: 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。
Swap
- si: 每秒从交换区写到内存的大小,由磁盘调入内存。
- so: 每秒写入交换区的内存大小,由内存调入磁盘。
注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
IO(现在的Linux版本块的大小为1kb)
- bi: 每秒读取的块数
- bo: 每秒写入的块数
注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。
system(系统)
- in: 每秒中断数,包括时钟中断。
- cs: 每秒上下文切换数。
注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。
CPU(以百分比表示)
- us: 用户进程执行时间百分比(user time),us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
- sy: 内核系统进程执行时间百分比(system time),sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
- id: 空闲时间百分比
- wa: IO等待时间百分比,wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
- st:显示虚拟机占用的CPU的百分比
2、显示活跃和非活跃内存
[root@localhost ~]# vmstat -a 2 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free inact active si so bi bo in cs us sy id wa st
2 0 25632 75756 387552 351732 0 1 15 10 74 154 0 0 99 0 0
0 0 25632 75716 387552 351760 0 0 0 0 74 156 0 1 99 0 0
0 0 25632 75716 387552 351760 0 0 0 0 70 143 1 0 99 0 0
2 0 25632 75716 387552 351760 0 0 0 10 74 145 1 1 98 0 0
0 0 25632 75716 387552 351760 0 0 0 0 70 142 1 1 99 0 0
使用-a参数后,memory列增加了inact和active两列,说明如下:
- inact:非活跃的内存大小
- active:活跃的内存大小
3、显示内存使用的详细信息
[root@localhost ~]# vmstat -s
1003420 K total memory
927672 K used memory
351696 K active memory
387552 K inactive memory
75748 K free memory
0 K buffer memory
156292 K swap cache
2097148 K total swap
25632 K used swap
2071516 K free swap
11280 non-nice user cpu ticks
30 nice user cpu ticks
13100 system cpu ticks
4629302 idle cpu ticks
3865 IO-wait cpu ticks
5 IRQ cpu ticks
6443 softirq cpu ticks
0 stolen cpu ticks
697257 pages paged in
482707 pages paged out
918 pages swapped in
6862 pages swapped out
3440441 interrupts
7204747 CPU context switches
1529832950 boot time
4730 forks
这些信息都来自于/proc/meminfo、/proc/stat和/proc/vmstat
4、查看磁盘的读写
[root@localhost ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 19783 1488 1394419 230919 9319 7438 965450 257332 0 111
sr0 12 0 96 326 0 0 0 0 0 0
dm-0 1139 0 9112 34344 6862 0 54896 393039 0 6
dm-1 17811 0 1373937 228308 7838 0 906432 268297 0 110
这些信息主要来源于/proc/diskstats。启动merged表示一次来自于合并的写/读请求,系统会把多个连接/邻近的读/写请求合并到一起来操作
5、查看/dev/sha1磁盘的读写统计信息
[root@localhost ~]# vmstat -p /dev/sda1
sda1 reads read sectors writes requested writes
2065 9226 2057 4122
这些信息主要来源于/proc/diskstats
- reads:来自于该分区读的次数
- read sectors:来自于该分区的读扇区的次数
- writes:来自于该分区的写的次数
- requested writes:来自于该分区的写请求次数