全部博文(512)
分类: LINUX
2006-07-19 17:42:01
工具介绍-vmstat
vmstat是一个很全面的性能分析工具,可以观察到系统的进程状态、内存使用、虚拟内存使用、磁盘的IO、中断、上下问切换、CPU使用等。系统性能分析工具中,我使用最多的是这个,除了 sysstat 工具包外,这个工具能查看的系统资源最多。
对于 Linux 的性能分析,100%理解 vmstat 输出内容的含义,那你对系统性能分析的能力就算是基本掌握了。
我这里主要说明一下这个命令显示出的部分数据代表的含义,和它反映出系统相关资源的状况。输出内容共有 6 类,分别说明如下。
Procs
r:
运行的和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)
b:
处于不可中断状态的进程数,常见的情况是由IO引起的
Memory
swpd: 切换到交换内存上的内存(默认以KB为单位)
如果 swpd 的值不为0,或者还比较大,比如超过
free: 空闲的物理内存
buff: 作为buffer cache的内存,对块设备的读写进行缓冲
cache: 作为page cache的内存, 文件系统的cache
如果 cache 的值大的时候,说明cache住的文件数多,如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi 会非常小。
Swap
si: 交换内存使用,由磁盘调入内存
so: 交换内存使用,由内存调入磁盘
内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。磁盘IO和CPU资源都会被消耗。
我发现有些朋友看到空闲内存(free)很少或接近于0时,就认为内存不够用了,实际上不能光看这一点的,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
Io
bi: 从块设备读入的数据总量(读磁盘) (KB/s),
bo: 写入到块设备的数据总理(写磁盘) (KB/s)
随机磁盘读写的时候,这2个 值越大(如超出
System
in: 每秒产生的中断次数
cs: 每秒产生的上下文切换次数
上面这2个值越大,会看到由内核消耗的CPU时间会越多
Cpu
us: 用户进程消耗的CPU时间百分比
us 的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超过50% 的使用,那么我们就该考虑优化程序算法或者进行加速了(比如 PHP/Perl)
sy: 内核进程消耗的CPU时间百分比
sy 的值高时,说明系统内核消耗的CPU资源多,这并不是良性的表现,我们应该检查原因。
wa: IO等待消耗的CPU时间百分比
wa 的值高时,说明IO等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。
id: CPU处在空闲状态时间百分比
情景分析
这个vmstat的输出那些信息值得关注?
Procs r: 运行的进程比较多,系统很繁忙
Io bo: 磁盘写的数据量稍大,如果是大文件的写,
Cpu us: 持续大于50,服务高峰期可以接受
Cpu wa: 稍微有些高
Cpu id:持续小于50,服务高峰期可以接受
///////////////////////
工具介绍-top
这个命令可以查看系统中运行的进程的状况,CPU使用状况,系统负载,内存使用等。它是检查系统进程运行状况最方便的工具了,它默认显示部分活动的进程,并且按照进程使用CPU的多少排序。它可以显示全部CPU的使用状况,也可以显示每个进程都运行在那个CPU上面。
我习惯使用这个命令查看那些进程或者那类进程占用CPU和内存资源最多,以此迅速定位存在性能问题的进程,以及运行异常的进程。
用 top 看到的内存的说明(Mem的第2行)
actv
active 活跃的内存页,正在映射给进程使用
in_d
inactive_dirty 非活跃的内存页,并且内存数据被修改,需要写回磁盘
in_c
inactive_clean 非活跃的内存页,干净的数据,可以被重新分配使用
用 top 看到的进程所处的几种状态(STAT列)。
D 不可中断休眠,通常是 IO 操作所处的状态
R 正在执行的或者处在等待执行的进程队列中
S 休眠中
T 暂停刮起的(比如Ctrl+Z),也可能是被 strace 命令调用中的状态
Z 僵尸进程,进程执行完成,但由于其父进程没有销毁该进程,而被init进程接管进行销毁。
W 没有使用物理内存,所占用的物理内存被切换到交换内存
< 高优先级的进程
N 低优先级
有时候一个进程会有多个状态的标志,比如SWN,SW
情景分析
前面两次top的输出那些信息值得关注?
图1)
Load average: 系统负载有降低的趋势,但仍然较高
Running: 有3个进程正在运行,正常,因为系统有4颗CPU
Cpu user: 接近200%了,有些大,服务高峰时可以接受
Cpu idle: 小于200%了,需要注意
图2)
Cpu iowait:接近200%了,很大
工具介绍-free
free命令显示系统内存的使用状况(物理内存和交换内存)
通过这个命令我们可以看到系统进程实际使用的物理内存,buffer和cache使用的物理内存
free命令输出的第二行(Mem)
这行分别显示了物理内存的总量(total)、已使用的(used)、空闲的(free)、共享的(shared)、buffer、cache的内存。
free命令输出的第三行(-/+ buffers/cache)
这行最容易让人迷惑。
它显示的第一个值(used这一列)是这样得来的:
Mem行used列 - Mem行buffers列 - Mem行cached列
它显示的第二个值(free这一列)是这样得来的:
Mem行free列 + Mem行buffers列 + Mem行cached列
free命令输出的第四行(Swap)
这行显示交换内存的总量、已使用量、空闲量
通常 buffer 和 cache 可以使用的内存空间越大,系统 IO 和 文件系统访问的性能越好。
工具介绍-uptime
最简便的查看系统负载的工具,系统负载越小,系统运行状况越好,对于系统负载处在什么范围内比较合适,我想是没有定论的,我介绍一下我的习惯。
我一般以15分钟负载的值来评估系统的健康度,以10为这个值的临界点,如果系统负载持续高于10,通常是存在某个资源长期紧张的原因,我们需要重视,并且得开始着手解决这个问题了。
如果偶尔高于10,应该开始留意它出现的频度,这往往是前面一种状况的先兆。
-----------------------------------------------------
作者 童剑 2006/03/21 msn:
chinaunix网友2008-04-16 16:32:02
今天因为要解释系统中可用内存的大小,用google看了半天,还有在CU上找了关天,竞然没有发现有比较好的章,估计很多人都没有注意到,懂了以后又没有整理出来。 在CU上看了很多文章说什么memory leak和linux内存管理不好,事实都是因为不懂linux的内存管理引起的误会。 晚上我把这几天看到,跟自已的一些想法,实验总结出来,供大家参考,如果有什么错误的时候请直接指出来,同时感谢wiki论坛不知名的作者以及他写的FAQ Linux Memory Management。 Linux的内存管理,实际上跟windows的内存管理有很相像的地方,都是用虚拟内存这个的概念,说到这里不得不骂MS,为什么在很多时候还有很大的物理内存的时候,却还是用到了pagefile. 所以才经常要跟一帮人吵着说Pagefile的大小,以及如何分配这个问题,在Linux大家就不用再吵什么swap大小的问题,我个人认为,swap设个512M已经足够了,如果你问说512M的SWAP不够用怎么办?只能说大哥你还是加内存吧,要不就检查你的应用,是不是真的出现了memory leak. 夜也深了,就不再
chinaunix网友2008-04-15 09:04:21
Free free 命令相对于top 提供了更简洁的查看系统内存使用情况: $ free total used free shared buffers cachedMem: 255268 238332 16936 0 85540 126384-/+ buffers/cache: 26408 228860Swap: 265000 0 265000 Mem:表示物理内存统计 -/+ buffers/cached:表示物理内存的缓存统计 Swap:表示硬盘上交换分区的使用情况,这里我们不去关心。 系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并不是第一行free 标记的 16936Kb,它仅代表未被分配的内存。 我们使用total1、used1、free1、used2、free2 等名称来代表上面统计数据的各值,1、2 分别代表第一行和第二行的数据。 total1:表示物理内存总量。 used1:表示总计分配给缓存(包含buffers 与cache )使用的数量,但