vmstat解读

2013年1月8日 | 分类: 操作系统, 网络性能 | 标签:

vmstat(VirtualMeomoryStatistics,虚拟内存统计)是Linux中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU等的整体情况进行监视。
解读内存
Linux系统的内存分为物理内存和虚拟内存两种。物理内存是真实的,也就是物理内存条上的内存。而虚拟内存则是采用硬盘空间补充物理内存,将暂时不使用的内存页写到硬盘上以腾出更多的物理内存让有需要的进程使用。当这些已被腾出的内存页需要再次使用时才从硬盘(虚拟内存)中读回内存。这一切对于用户来说是透明的。通常对Linux系统来说,虚拟内存就是swap分区。
如:每隔2秒,采集性能数据,持续10次

[kongjian@xxxxx.cm4 home]$ vmstat 2 10
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   1376  41048 346248 1479684    0    0     2   165    0    0  6  1 93  0  0
 0  0   1376  39056 346260 1481200    0    0     0  3342 5680 6783  3  1 95  0  0
 1  0   1376  36204 346288 1483848    0    0     0    10 5605 7389  4  1 96  0  0
 1  0   1376  34344 346324 1484788    0    0     0    66 4199 4981  4  1 94  0  0

各个字段的含义:
Procs
r: 等待运行的进程数
b: 处在非中断睡眠状态的进程数
Memory
swpd: 虚拟内存使用情况,单位:KB
free: 空闲的内存,单位KB
buff: 被用来做为缓存的内存数,单位:KB
Swap
si: 从磁盘交换到内存的交换页数量,单位:KB/秒
so: 从内存交换到磁盘的交换页数量,单位:KB/秒
IO
bi: 发送到块设备的块数,单位:块/秒
bo: 从块设备接收到的块数,单位:块/秒
System
in: 每秒的中断数,包括时钟中断
cs: 每秒的环境(上下文)切换次数
CPU
按 CPU 的总使用百分比来显示
us: CPU 使用时间
sy: CPU 系统使用时间
id: 闲置时间
对于内存监控,需要关心的指标包括:swpd、free、buff、cache、si和so,尤其需要重视的是free、si和so。很多人都会认为系统的空闲内存(free)少就代表系统性能有问题,其实并不是这样的,这还要结合si和so(内存和磁盘的页面交换)两个指标进行分析。正常来说,当物理内存能满足系统需要的话(也就是说物理内存能足以存放所有进程的数据),那么物理内存和磁盘(虚拟内存)是不应该存在频繁的页面交换操作的,只有当物理内存不能满足需要时系统才会把内存中的数据交换到磁盘中。而由于磁盘的性能是比内存慢很多的,所以如果存在大量的页面交换,那么系统的性能必然会受到很大影响。
解读cpu
在Linux系统中监控CPU的性能主要关注3个指标:运行队列、CPU使用率和上下文切换,理解这3个指标的概念和原理对于发现和处理CPU性能问题有很大的帮助。
1. 运行队列
每个CPU都会维护一个运行队列,调度器会不断地轮询让队列中的进程运行,直到进程运行完毕将其由队列中删除。如果CPU过载,就会出现调度器跟不上系统要求,导致运行队列中等待运行的进程越来越多。正常来说,每个CPU的运行队列不要超过3,如果是双核CPU就不要超过6。
2. CPU使用率
CPU使用率一般可以分为一下几个部分。
a. 用户进程:运行用户进程所占用的CPU时间的百分比。
b. 系统进程:运行系统进程和中断所占用的CPU的时间百分比。
c. 等待IO:因为IO等待而使CPU处于idle状态的时间百分比。
d. 空闲:CPU处于空闲状态的时间百分比。
如果CPU的空闲率长期低于10%,那么表示CPU的资源已经非常紧张,应该考虑进程优化或添加更多地CPU。“等待IO”表示CPU因等待IO资源而被迫处于空闲状态,这时候的CPU并没有处于运算状态,而是被白白浪费了,所以“等待IO应该越小越好。”
3. 上下文切换
通过CPU时间轮询的方法,Linux能够支持多任务同时运行。对于普通的CPU,内核会调度和执行这些进程,每个进程都会被分配CPU时间片并运行。当一个进程用完时间片或者被更高优先级的进程抢占时间块后,它会被转到CPU的等待运行队列中,同时让其他进程在CPU上运行。这个进程切换的过程被称为上下文切换。过多的上下文切换会造成系统的很大的开销。
具体的一些例子参见:http://home.lupaworld.com/home-space-uid-56821-do-blog-id-233122.html

本文的评论功能被关闭了.