开源是一种精神,分享是一种美德!

vmstat

相关命令:暂无相关命令
vmstat 报告虚拟内存的统计信息

用法

vmstat [-a] [-n] [-S unit] [delay [ count]]

vmstat [-s] [-n] [-S unit]

vmstat [-m] [-n] [delay [ count]]

vmstat [-d] [-n] [delay [ count]]

vmstat [-p disk partition] [-n] [delay [ count]]

vmstat [-f]

vmstat [-V]

参数

-a:显示活跃和非活跃内存

-f:显示从系统启动至今的fork数量 。引申閱讀: http://www.cnblogs.com/leoo2sk/archive/2009/12/11/talk-about-fork-in-linux.html

-m:显示slabinfo

-n:只在开始时显示一次各字段名称。

-s:显示内存相关统计信息及多种系统活动数量。

    delay:刷新时间间隔。如果不指定,只显示一条结果。

    count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。

-d:显示磁盘相关统计信息。

-p:显示指定磁盘分区统计信息

-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)

-V:显示vmstat版本信息。


类别    项目    含义                                        说明
Procs    r        等待执行的任务数                            展示了正在执行和等待CPU资源的任务个数。当这个值超过了CPU数目,就会出现CPU瓶颈了
        b        处在非中断睡眠状态的进程数     
        
Memory    swpd    正在使用的swap大小单位K    
        free    空闲的内存空间    
        buff    已使用的buff大小,对块设备的读写进行缓冲    
        cache    已使用的cache大小,文件系统的cache    
        inact    非活跃内存大小     
        active    活跃的内存大小     
        
Swap    si    交换内存使用,由磁盘调入内存    
        so    交换内存使用,由内存调入磁盘    
        
IO      bi    从块设备读入的数据总量(读磁盘) (KB/s),    
        bo    写入到块设备的数据总理(写磁盘) (KB/s)    
        
System    in    每秒产生的中断次数    
        cs    每秒产生的上下文切换次数                        上面这2个值越大,会看到由内核消耗的CPU时间会越多
        
CPU     us    用户进程消耗的CPU时间百分比                     us 的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超过50% 的使用,那么我们就该考虑优化程序算法或者进行加速了
        sy    内核进程消耗的CPU时间百分比                     sy 的值高时,说明系统内核消耗的CPU资源多,这并不是良性的表现,我们应该检查原因。
        id    空闲    
        wa    IO等待消耗的CPU时间百分比                       wa 的值高时,说明IO等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。

[root@localhost ~]# vmstat 2    #每二秒显示一次系统内存的统计信息
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0      0 219908  62964 175548    0    0    47    12   12   17  0  1 99  0
 0  0      0 219900  62964 175548    0    0     0     0   11   12  0  0 100  0
 0  0      0 219900  62964 175548    0    0     0     0    9    9  0  0 100  0

[root@localhost ~]# vmstat 2 5   #每二秒显示一次系统内存的统计信息,总共5次
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0      0 219908  62964 175548    0    0    46    12   12   17  0  1 99  0
 0  0      0 219900  62964 175548    0    0     0     0   12   14  0  0 100  0
 0  0      0 219900  62964 175548    0    0     0     0   11   11  0  1 100  0
 0  0      0 219900  62964 175548    0    0     0     0   10   11  0  0 100  0
 0  0      0 219900  62964 175548    0    0     0     0   10    9  0  0 100  0 
 
[root@localhost ~]# vmstat -d   #显示磁盘信息
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
ram0       0      0       0       0      0      0       0       0      0      0
ram1       0      0       0       0      0      0       0       0      0      0
ram2       0      0       0       0      0      0       0       0      0      0
ram3       0      0       0       0      0      0       0       0      0      0
ram4       0      0       0       0      0      0       0       0      0      0
ram5       0      0       0       0      0      0       0       0      0      0
ram6       0      0       0       0      0      0       0       0      0      0
ram7       0      0       0       0      0      0       0       0      0      0
ram8       0      0       0       0      0      0       0       0      0      0
ram9       0      0       0       0      0      0       0       0      0      0
ram10      0      0       0       0      0      0       0       0      0      0
ram11      0      0       0       0      0      0       0       0      0      0
ram12      0      0       0       0      0      0       0       0      0      0
ram13      0      0       0       0      0      0       0       0      0      0
ram14      0      0       0       0      0      0       0       0      0      0
ram15      0      0       0       0      0      0       0       0      0      0
loop0      0      0       0       0      0      0       0       0      0      0
loop1      0      0       0       0      0      0       0       0      0      0
loop2      0      0       0       0      0      0       0       0      0      0
loop3      0      0       0       0      0      0       0       0      0      0
loop4      0      0       0       0      0      0       0       0      0      0
loop5      0      0       0       0      0      0       0       0      0      0
loop6      0      0       0       0      0      0       0       0      0      0
loop7      0      0       0       0      0      0       0       0      0      0
sda    12341   5909  471542  465300   1325   2081  127088   32204      0     19
sr0        0      0       0       0      0      0       0       0      0      0

评论(1)

    • 桑夏
      关于Vmstat的输出参数:
      r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

      b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。

      swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

      free 空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。

      buff Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M

      cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

      si 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

      so 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

      bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒

      bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

      in 每秒CPU的中断次数,包括时间中断

      cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

      us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

      sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

      id 空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

      wt 等待IO CPU时间。
      [回复]

评论

名字:
验证码:
获取验证码
内容: