Virtual Memory Statistics ( vmstat )
vmstat 是报告关于进程,内存,IO,CPU活动的一个统计报告。
在不同的系统中,特别是linux和unix中显示的相关选项会有很大差别。
我们先以ubuntu为例:
一般VMSTAT工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。
ipcpu@ubuntu:~$ vmstat 5 10
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 6797712 147668 884660 0 0 3 21 162 146 1 1 98 0
0 0 0 6797696 147668 884660 0 0 0 3 35 37 1 0 99 0
1 0 0 6797332 147668 884660 0 0 0 24 62 95 1 0 99 0
0 0 0 6811632 147668 884692 0 0 0 5 25 26 1 0 99 0
0 0 0 6818360 147668 884704 0 0 0 5 70 265 1 3 96 0
0 0 0 6817468 147668 884728 0 0 0 316 253 474 3 2 95 0
procs相关选项:
r 在运行队列中等待的进程数
b 在等待io的进程数
memoy
swapd 现时可用的交换内存(k表示)
free 空闲的内存(k表示)
buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
cache 作为page cache的内存数量,一般作为文件系统的cache,
如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。
swap
si 由内存进入内存交换区数量。
so 由内存交换区进入内存数量。
如今的大内存也让swap渐渐淡出了人们的视线,这个不好分析。
IO
bi 从块设备读入数据的总量(读磁盘)(每秒kb)。
bo 向块设备写入数据的总量(写磁盘)(每秒kb)
system 显示采集间隔内发生的中断数
in 列表示在某一时间间隔中观测到的每秒设备中断数。
cs 列表示每秒产生的上下文切换次数。
如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
cpu相关状态
cs[user] 用户进程消耗的CPU时间百分比
sy[system] 内核进程消耗的CPU时间百分比
id[idle] cpu空闲的时间
wa[wait] IO等待消耗的CPU时间百分比
us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
us+sy 大于 80%说明可能存在CPU不足。
wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带
宽瓶颈造成的(主要是块操作)。wa长期超过10% 就该考虑了。
*注意:
NFS由于是在内核里面运行的,所以NFS活动所占用的cpu时间反映在sy里面。这个数字经常很大的话,就需要注意是否某个内核进程,比如NFS任务比较繁重。如果us和sy同时都比较大的话,就需要考虑将某些用户程序分离到另外的服务器上面,以免互相影响。
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等等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间。一般情况下,应用程序的问题会比较大一些。比 如一些SQL语句不合理等等都会造成这样的现象。
Unix中的vmstat
freebsd7.2中的vmstat
[ipcpu@freebsd ~]$ vmstat
procs memory page disk faults cpu
r b w avm fre flt re pi po fr sr ad4 in sy cs us sy id
0 0 0 152M 7448M 131 0 0 0 132 0 0 167 644 860 0 1 99
[ipcpu@freebsd ~]$
AIX 5.3中的vmstat
-bash-3.00$ vmstat
System configuration: lcpu=4 mem=1904MB
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
1 1 308679 55310 0 0 0 0 1 0 94 4501 333 1 1 98 0
-bash-3.00$
SunOS 5.10的vmstat
-bash-3.00$ vmstat
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr s0 s1 s2 s5 in sy cs us sy id
0 0 0 2584720 2665344 3 10 1 0 0 0 0 0 0 0 0 495 249 235 0 0 99
-bash-3.00$
这里稍微介绍下page相关选项:
re 回收的页面
mf 非严重错误的页面
pi 进入页面数(k表示)
po 出页面数(k表示)
fr 空余的页面数(k表示)
de 提前读入的页面中的未命中数
sr 通过时钟算法扫描的页面
Tips小提示:Linux的块设备和字符设备
他们根本区别在于是否可以被随机访问——换句话说就是,能否在访问设备时随意地从一个位置跳转到另一个位置。
举个例子,键盘这种设备提供的就是一个数据流,只能按照你敲击的字母顺序进行录入,所以键盘就是一种典型的字符设备。
硬盘设备的驱动可能要求读取磁盘上任意块的内容,然后又转去读取别的块的内容,而被读取的块在磁盘上位置不一定要连续,所以说硬盘可以被随机访问,而不是以流的方式被访问,显然它是一个块设备。
参考资料:
http://qa.taobao.com/?p=2269&cpage=2
http://hi.baidu.com/loveastyy/blog/item/29bdb2fa117f1e2b4f4aeade.html
http://linux.ccidnet.com/art/9513/20070730/1160333_1.html
http://www.jb51.net/os/RedHat/2161.html
http://bbs.linuxtone.org/forum-viewthread-tid-845.html
转载请注明:IPCPU-网络之路 » Linux学习笔记之vmstat