vmstat介绍

 

vmstat介绍
#vmstat是什么?
vmstat是一个十分有用的Linux系统监控工具,使用vmstat命令可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息。
 
#前言
很显然从名字中我们就可以知道vmstat是一个查看虚拟内存(Virtual Memory)使用状况的工具,但是怎样通过vmstat来发现系统中的瓶颈呢?在回答这个问题前,还是让我们回顾一下Linux中关于虚拟内存相关内容。
 
#虚拟内存运行原理
    在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。
    在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。
    分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。
    当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。经管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing(颠簸)。

 

使用vmstat
1.用法
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数量 。 关于fork
-m
显示slabinfo 详细信息可以用cat /proc/slabinfo查看
-n
只在开始时显示一次各字段名称
-s
显示内存相关统计信息及多种系统活动数量
delay
刷新时间间隔。如果不指定,只显示一条结果
count
刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷
-d
显示磁盘相关统计信息
-p
显示指定磁盘分区统计信息
-S
使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
-V
显示vmstat版本信息

 

 

#基本用法
[root@study ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r b   swpd   free   buff cache   si   so    bi    bo   in   cs us sy id wa st
 0 0   4420 147896 47740 22184    6    4    14     8 1009   13 0 2 97 1 0
 
#显示活跃和非活跃内存
[root@study ~]# 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
 0 0   4420 147896 42060 41408    6    4    14     8 1009   13 0 2 97 1 0
 
字段说明:

Procs(进程)
r: 运行队列中进程数量,在监控的时间间隔内,运行队列里等待CPU的任务(任务)的个数,即不包含vmstat进程 procs_running-1,如果长期大于1,说明cpu不足,需要增加cpu
b: 等待IO的进程数量,在监控的时间间隔内,被资源阻塞的任务数(I/0,页面调度,等等),通常情况下是接近0的 procs_blocked,比如正在等待I/O、或者内存交换等
Memory(内存)
swpd: 使用虚拟内存大小,内存切换到swap的数量,单位KB.如果swpd的值不为0,或者比较大,比如超过了100m,只要si,so的值长期为0,系统性能还是正常的.ITPUB个人空间-x} t7w%L!R9u S
free: 可用内存大小,当前的空闲页面列表中内存数量,单位KB.ITPUB个人空间­ML ?+GZ
buff: 用作缓冲的内存大小,作为buffer cache的内存数量,一般对块设备的读写才需要缓冲.单位KB
cache: 用作缓存的内存大小,作为page cache的内存数量,一般作为文件系统的cache.单位KB.如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好.[ Z M3u"Lh!Nqu
inact: 非活跃内存大小(当使用-a选项时显示)
active: 活跃的内存大小(当使用-a选项时显示)
Swap
si: 每秒从交换分区写到内存的大小
so: 每秒从内存写入交换分区的大小
IO
bi: 每秒读取的块数,数据从块设备读取的量(读磁盘),单位blocks/s
bo: 每秒写入的块数,数据写入块设备的量(写磁盘),单位blocks/s. 这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析.ITPUB个人空间V-u;F‑z5s~(u
system
in: 每秒中断数,包括时钟中断,列表示在某一时间间隔中观测到的每秒设备中断数。
cs: 每秒上下文切换数,表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
CPU
us: 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。!|B5w3s7] F9~
sy: 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
id: 列显示了cpu处在空闲状态的时间百分比 
wa: 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。

 

 

#高级用法
[root@study ~]# vmstat -m -n    
Cache                       Num Total   Size Pages
fib6_nodes                    7    113     32    113
ip6_dst_cache                 8     15    256     15
ndisc_cache                   2     20    192     20
RAWv6                         4     11    704     11
UDPv6                         0      0    640      6
tw_sock_TCPv6                 0      0    128     30
request_sock_TCPv6            0      0    128     30
TCPv6                         3      3   1280      3
ip_fib_alias                 14   113     32    113
ip_fib_hash                  14    113     32    113
jbd_1k                        0      0   1024      4
bio_map_info                100    105   1052      7
dm_mpath                      0      0   1052      7
avtab_node               133862 133980     16    203
jbd_4k                        0      0   4096      1
dm_uevent                     0      0   2460      3
dm_tio                        0      0     16    203
dm_io                         0      0     20    169
scsi_cmd_cache                1     12    320     12
sgpool-128                   32     32   2048      2
sgpool-64                    32     32   1024      4
sgpool-32                    32     32    512      8
sgpool-16                    32     45    256     15
sgpool-8                     33     60    128     30
scsi_io_context               0      0    104     37
ext3_inode_cache          10024 10032    492      8
ext3_xattr                  216    234     48     78
journal_handle               16    169     20    169
journal_head                 13    144     52     72
revoke_table                  4    254     12    254
revoke_record                 0      0     16    203
uhci_urb_priv                 1    127     28    127
UNIX                         17     18    448      9
flow_cache                    0      0    128     30
msi_cache                    32    113     32    113
cfq_ioc_pool                 24    177     64     59
cfq_pool                     30    174    136     29
crq_pool                     13     84     44     84
deadline_drq                  0      0     44     84
as_arq                        0      0     56     67
mqueue_inode_cache            1      7    576      7
isofs_inode_cache             0      0    368     10
hugetlbfs_inode_cache        1     11    340     11
ext2_inode_cache              0      0    476      8
ext2_xattr                    0      0     48     78
dnotify_cache                 0      0     20    169
dquot                         0      0    128     30
eventpoll_pwq                 0      0     36    101
eventpoll_epi                 0      0    128     30
inotify_event_cache           0      0     28    127
inotify_watch_cache           1     92     40     92
kioctx                        0      0    192     20
kiocb                         0      0    128     30
fasync_cache                  0      0     16    203
shmem_inode_cache           355    360    436      9
posix_timers_cache            0      0     88     44
uid_cache                     2     59     64     59
ip_mrt_cache                  0      0    128     30
tcp_bind_bucket               2    203     16    203
inet_peer_cache               1     59     64     59
secpath_cache                 0      0     32    113
xfrm_dst_cache                0      0   320     12
ip_dst_cache                 82     90    256     15
arp_cache                     2     20    192     20
RAW                           2      7    512      7
UDP                           0      0    512      7
tw_sock_TCP                   0      0    128     30
request_sock_TCP              0      0    128     30
TCP                           1      7   1152      7
blkdev_ioc                   24    381     28    127
blkdev_queue                 28     28    956      4
blkdev_requests              12     23    172     23
biovec-256                    7      8   3072      2
biovec-128                    7     10   1536      5
biovec-64                     7     10    768      5
biovec-16                     7     20    192     20
biovec-4                      7     59     64     59
biovec-1                      8    203     16    203
bio                         256    270    128     30
utrace_engine_cache           0      0     32    113
utrace_cache                  0      0     32    113
sock_inode_cache             40     40    384     10
skbuff_fclone_cache          10     10    384     10
skbuff_head_cache            73    360    192     20
file_lock_cache               4     40     96     40
Acpi-Operand               3917   4048     40     92
Acpi-ParseExt                 0      0     44     84
Acpi-Parse                    0      0     28    127
Acpi-State                    0      0     44     84
Acpi-Namespace             2855   2873     20    169
delayacct_cache              79    234     48     78
taskstats_cache               2     53     72     53
proc_inode_cache            396    396    356     11
sigqueue                      0     27    144     27
radix_tree_node            3300   3304    276     14
bdev_cache                   24     28    512      7
sysfs_dir_cache            5906   5928     48     78
mnt_cache                    28     30    128     30
inode_cache                1483   1507    340     11
dentry_cache              15507 15515    136     29
filp                        407    860    192     20
names_cache                   1      1   4096      1
avc_node                    503   1368     52     72
selinux_inode_security    12319 12324     48     78
key_jar                       9     30    128     30
idr_layer_cache             104    116    136     29
buffer_head               12665 12672     52     72
mm_struct                    41     45    448      9
vm_area_struct             1159   1196     84     46
fs_cache                     40     59     64     59
files_cache                  41     50    384     10
signal_cache                 70     84    512      7
sighand_cache                60     60   1344      3
task_struct                  66     66   1360      3
anon_vma                    405    508     12   254
pgd                          27     27   4096      1
pid                          79    202     36    101
size-131072(DMA)              0      0 131072      1
size-131072                   0      0 131072      1
size-65536(DMA)               0      0 65536      1
size-65536                    1      1 65536      1
size-32768(DMA)               0      0 32768      1
size-32768                    2      2 32768      1
size-16384(DMA)               0      0 16384      1
size-16384                    2      2 16384      1
size-8192(DMA)                0      0   8192      1
size-8192                     4      4   8192      1
size-4096(DMA)                0      0   4096      1
size-4096                    81     81   4096      1
size-2048(DMA)                0      0   2048      2
size-2048                   270    270   2048      2
size-1024(DMA)                0      0   1024      4
size-1024                   216    216   1024      4
size-512(DMA)                 0      0    512      8
size-512                    345    368    512      8
size-256(DMA)                 0      0    256     15
size-256                    375    375    256     15
size-128(DMA)                 0      0    128     30
size-128                   1998   2040    128     30
size-64(DMA)                  0      0     64     59
size-32(DMA)                  0      0     32    113
size-64                    2811   3658     64     59
size-32                   80343 80343     32    113
kmem_cache                  143    150    256     15
 
#显示指定磁盘分区统计信息 这里显示的是sda1
[root@study ~]# vmstat -p sda1
sda1          reads   read sectors writes    requested writes
                  66       1722         19         66
[root@study ~]# vmstat -s     
       255412 total memory
       154856 used memory
        70072 active memory
        59820 inactive memory
       100556 free memory
        48816 buffer memory
        67536 swap cache
       522104 total swap
         4420 used swap
       517684 free swap
         2169 non-nice user cpu ticks
            5 nice user cpu ticks
        12906 system cpu ticks
      2928214 idle cpu ticks
        16527 IO-wait cpu ticks
         1148 IRQ cpu ticks
        51640 softirq cpu ticks
            0 stolen cpu ticks
       425306 pages paged in
       218953 pages paged out
        39641 pages swapped in
        27408 pages swapped out
     30395611 interrupts
       398134 CPU context switches
   1334760228 boot time
         7856 forks
 
参数 描述 /proc/stat

non-nice user cpu ticks
自系统启动以来,CPU在用户态下运行非nice进程的时间,单位为jiffies user
nice user cpu ticks
自系统启动以来,CPU在用户态下运行nice进程的时间,单位为jiffies nice
system cpu ticks
自系统启动以来,CPU处于系统状态的时间,单位为jiffies sys
idle cpu ticks
自系统启动以来,CPU处于闲置状态的时间,单位为jiffies idle
IO-wait cpu ticks
自系统启动以来,CPU处理IO中断的时间,单位为jiffies iowait
IRQ cpu ticks
自系统启动以来,CPU处理硬中断的时间,单位为jiffies irq
softirg cpu ticks
自系统启动以来,CPU处理软中断的时间,单位为jiffies Softirq
interrupts
自系统启动以来,发生的所有的中断的次数目 Intr
CPU context switches
自系统启动以来,发生的上下文交换的次数 Ctxt
boot time
自系统启动以来到现在运行的时间,单位为秒。 btime
forks
自系统启动以来所创建的任务的个数目。 Process

#显示活跃和非活跃内存信息 单位为M
[root@study ~]# vmstat -a -n -S M
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r b   swpd   free inact active   si   so    bi    bo   in   cs us sy id wa st
 0 0      4     98     58     68    0    0    14     7 1009   13 0 2 97 1 0
 
#显示活跃和非活跃内存信息 单位为k
[root@study ~]# vmstat -a -n -S k
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r b   swpd   free inact active   si   so    bi    bo   in   cs us sy id wa st
 0 0   4526 102969 61296  71757    5    4    14     7 1009   13 0 2 97 1 0
 
#显示活跃和非活跃内存信息 单位为m
[root@study ~]# vmstat -a -n -S m
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r b   swpd   free inact active   si   so    bi    bo   in   cs us sy id wa st
 0 0      4    102     61     71    0    0    14     7 1009   13 0 2 97 1 0
 
#显示活跃和非活跃内存信息 单位为K
[root@study ~]# vmstat -a -n -S K
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r b   swpd   free inact active   si   so    bi    bo   in   cs us sy id wa st
 0 0   4420 100556 59876 70080    5    4    14     7 1009   13 0 2 97 1 0
 
 

 

#显示磁盘相关统计信息
[root@study ~]# vmstat -d -n
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
sda    45667 30484 845585 7332659 16942 37976 439170 4612088      0    258
hdc        1      0       4      18      0      0       0       0      0      0
fd0        0      0       0       0      0      0       0       0      0      0
md0        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
 
#可以看出上下文交换(cs)的次数小于中断(in)的发生次数。当系统大部分时间是空闲并且中断大部分是时间中断时,这种现象极可能发生。当时间中断发生时, 因为调度器没有什么任务可调度,所以很少发生上下文切换。
[root@study ~]# vmstat 2 4  
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r b   swpd   free   buff cache   si   so    bi    bo   in   cs us sy id wa st
 0 0   4420 100196 49120 67540    5    3    14     7 1009   13 0 2 97 1 0
 0 0   4420 100196 49120 67540    0    0     0     0 891   10 0 1 99 0 0
 0 0   4420 100196 49120 67540    0    0     0     0 891   10 0 1 99 0  0
 0 0   4420 100196 49128 67532    0    0     0    14 946   14 0 1 99 0 0
 
这个 vmstat 的输出那些信息值得关注?
如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
如果bi,bo 长期不等于0,表示内存不足。
procs r: 运行的进程比较多,系统很繁忙
io bo: 磁盘写的数据量稍大,如果是大文件的写,10M以内基本不用担心,如果是小文件写2M以内基本正常
cpu us: 持续大于50,服务高峰期可以接受
cpu wa: 稍微有些高
cpu id:持续小于50,服务高峰期可以接受
 
CPU问题现象:
1.) 如果在processes中运行的序列(process r)是连续的大于在系统中的CPU的个数表示系统现在运行比较慢,有多数的进程等待CPU.
2.) 如果r的输出数大于系统中可用CPU个数的4倍的话,则系统面临着CPU短缺的问题,或者是CPU的速率过低,系统中有多数的进程在等待CPU,造成系统中进程运行过慢.
3.) 如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us) 系统则面临着CPU资源的短缺.
  
解决办法:
当发生以上问题的时候请先调整应用程序对CPU的占用情况.使得应用程序能够更有效的使用CPU.同时可以考虑增加更多的CPU. 关于CPU的使用情况还可以结合mpstat, ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间.一般情况下,应用程序的问题会比较大一些.比如一些SQL语句不合理等等都会造成这样的现象.
  
  
内存问题现象:
内存的瓶颈是由scan rate (sr)来决定的.scan rate是通过每秒的始终算法来进行页扫描的.如果scan rate(sr)连续的大于每秒200页则表示可能存在内存缺陷.同样的如果page项中的pi和po这两栏表示每秒页面的调入的页数和每秒调出的页数.如果该值经常为非零值,也有可能存在内存的瓶颈,当然,如果个别的时候不为0的话,属于正常的页面调度这个是虚拟内存的主要原理.
  
解决办法:
1.调节applications & servers使得对内存和cache的使用更加有效.
2.增加系统的内存.
关于内存的使用情况还可以结ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的内存的使用情况,和那些进程在占用大量的内存.一般情况下,如果内存的占用率比较高,但是,CPU的占用很低的时候,可以考虑是有很多的应用程序占用了内存没有释放,但是,并没有占用CPU时间,可以考虑应用程序,对于未占用CPU时间和一些后台的程序,释放内存的占用.
 

你可能感兴趣的:(linux,工具,memory,vmstat,虚拟内存)