vmstat 虚拟内存统计
Linux vmstat1 命令(Virtual Memory Statistics) 用来显示Linux系统虚拟内存状态。
可以展现指定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况、I/O等系统整体运行状态。
vmstat 用法
Usage: vmstat [options] [delay [count]]
e.g., vmstat, vmstat 2 5
delay :刷新时间间隔。如果不指定,只显示一条结果
count :刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷
$ vmstat 2 5
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 1312524 326480 5556100 0 0 0 0 1 0 0 0 100 0 0
0 0 0 1312524 326480 5556100 0 0 0 0 54 56 0 0 100 0 0
0 0 0 1312524 326480 5556100 0 0 0 0 63 64 0 0 100 0 0
0 0 0 1312508 326480 5556100 0 0 0 0 61 60 0 0 100 0 0
0 0 0 1312540 326480 5556100 0 0 0 0 53 58 0 0 100 0 0
vmstat 选项
选项 | 简要描述 |
---|---|
-a, --active | 显示活跃和非活跃内存 |
-f, --forks | 显示从系统启动至今的fork数量 |
-m, --slabs | 显示slabinfo |
-n, --one-header | 只在开始时显示一次各字段名称 |
-s, --stats | 显示内存相关统计信息及多种系统活动数量 |
-d, --disk | 显示磁盘相关统计信息 |
-D, --disk-sum | 汇总磁盘相关统计信息 |
-p, --partition | 显示指定磁盘分区统计信息 |
-S, --unit | 使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K |
-w, --wide | 显示结果宽输出 |
-t, --timestamp | 显示结果中带时间戳 |
-h, --help | 显示vmstat使用帮助 |
-V, --version | 显示vmstat版本信息 |
vmstat 示例
$ 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 1314476 326516 5556060 0 0 0 0 1 0 0 0 100 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),那么不用担心,系统性能这时不会受到影响的。因为linux总是先把内存用光
io 输入输出
bi 每秒读取的块数
bo 每秒写入的块数
注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大
system 系统信息
in 每秒中断数,包括时钟中断
cs 每秒上下文切换数
注意:上面2个值越大,会看到由内核消耗的CPU时间会越大
cpu CPU信息(以百分比表示)
us 用户进程执行时间百分比(user time) us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速
sy 内核系统进程执行时间百分比(system time) sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因
wa IO等待时间百分比 wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)
id 空闲时间百分比
# vmstat -s 查看内存使用的详细信息
$ vmstat -s
8012508 K total memory
815760 K used memory
1407900 K active memory
4935424 K inactive memory
1314148 K free memory
326528 K buffer memory
5556072 K swap cache
14680060 K total swap
0 K used swap
14680060 K free swap
708555 non-nice user cpu ticks
2139 nice user cpu ticks
648064 system cpu ticks
1877888305 idle cpu ticks
1204558 IO-wait cpu ticks
0 IRQ cpu ticks
2862 softirq cpu ticks
425525 stolen cpu ticks
1456761 pages paged in
9074226 pages paged out
0 pages swapped in
0 pages swapped out
493924598 interrupts
524772832 CPU context switches
1547016120 boot time
9043091 forks
# vmstat -d 查看磁盘的读/写
$ vmstat -w -d
disk- -------------------reads------------------- -------------------writes------------------ ------IO-------
total merged sectors ms total merged sectors ms cur sec
vda 34329 8 2341192 230644 424161 341252 17539540 53518376 0 7844
vdb 12053 19 569194 71231 9876 10734 609392 189422 0 56
vdc 179 0 3136 24 0 0 0 0 0 0
dm-0 31010 0 2235050 218373 144559 0 11081048 21811636 0 3428
# 查看/dev/vda1磁盘的读/写
$ vmstat -p /dev/vda1
vda1 reads read sectors writes requested writes
336 55962 15 60
参考资料
- 如有 错误之处 还请多多指正