vmstat(VirtualMemoryStatistics,虚拟内存统计)是Linux中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU等的整体情况进行监视。

vmstat 5 3表示每隔5秒统计一次,一共统计三次。

\[1014154@cc69dd4c5-4tdb5 ~\]$ vmstat 5 3  
procs -----------memory----------      ---swap-- -----io---- -system-- ------cpu-----  
 r  b   swpd   free   buff   cache      si   so    bi    bo   in   cs us sy id wa st  
 8  0      0 45453212 374768 30763728    0    0    14    99    1    1 11 10 78  0  1  
10  0      0 45489232 374768 30763360    0    0     2  1275 95118 97908 13 11 75  0  1  
 6  0      0 45452908 374768 30765148    0    0     0  3996 89924 92073 12 10 78  0  1

procs

  • r:表示运行和等待CPU时间片的进程数(就是说多少个进程真的分配到CPU),这个值如果长期大于系统CPU个数,说明CPU不足。
  • b:表示在等待资源的进程数,比如正在等待I/O或者内存交换等。

memory

  • swpd:表示切换到内存交换区的内存大小,即虚拟内存已使用的大小(单位KB),如果大于0,表示物理内存不足.
  • free:表示当前空闲的物理内存。
  • buff:表示缓冲大小,一般对块设备的读写才需要缓冲
  • Cache:表示缓存大小,一般作为文件系统进行缓冲,频繁访问的文件都会被缓存,如果cache值非常大说明缓存文件比较多,如果此时io中的bi比较小,说明文件系统效率比较好。

swap

  • si:表示数据由磁盘读入内存;通俗的讲就是每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
  • so:表示由内存写入磁盘,也就是由内存交换区进入内存的数据大小。

io

  • bi:表示由块设备读入数据的总量,即读磁盘,单位kb/s
  • bo:表示写到块设备数据的总量,即写磁盘,单位kb/s

system

  • in:表示某一时间间隔内观测到的每秒设备终端数。
  • cs:表示每秒产生的上下文切换次数,越小越好。

cpu

  • us:表示用户进程消耗的CPU时间百分比,如果长期大于50%,需要考虑优化程序或者算法。
  • sy:表示系统内核进程消耗的CPU时间百分比,一般来说us+sy应该小于80%,如果大于80%,说明可能存在CPU瓶颈。
  • id:表示CPU处在空间状态的时间百分比。
  • wa:表示IP等待所占用的CPU时间百分比,wa值越高,说明I/O等待越严重,根据经验wa的参考值为20%,如果超过20%,说明I/O等待严重,引起I/O等待的原因可能是磁盘大量随机读写造成的,也可能是磁盘或者监控器的带宽瓶颈(主要是块操作)造成的。