Linux性能监控工具

上一篇 / 下一篇  2010-05-16 01:24:22 / 个人分类:性能测试

工具介绍-vmstat
vmstat是一个很全面的性能分析工具,可以观察到系统的进程状态、内存使用、虚拟内存使用、磁盘的IO、中断、上下间切换、CPU使用等。系统性能分析工具中,我使用最多的是这个,除了 sysstat 工具包外,这个工具能查看的系统资源最多.主要说明一下这个命令显示出的部分数据代表的含义,和它反映出系统相关资源的状况。输出内容共有 6 类,分别说明如下。

Procs
r:
运行的和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)
b:
处于不可中断状态的进程数,常见的情况是由IO引起的

Memory
swpd: 切换到交换内存上的内存(默认以KB为单位)
如果 swpd 的值不为0,或者还比较大,比如超过100M了,但是 si, so 的值长期为 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个 值越大(如超出1M),能看到CPU在IO等待的值也会越大

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: 磁盘写的数据量稍大,如果是大文件的写,10M以内基本不用担心,如果是小文件写2M以内基本正常
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 非活跃的内存页,干净的数据,可以被重新分配使用

问题?
in_d 和 in_c 以及 cache, buffer 的内存有何不同?
我的理解:
actv, in_d, in_c 是 VM 中对内存的管理组织形式,buffer是块设备读写缓冲,cache是文件系统缓存

用 top 看到的进程所处的几种状态(STAT列)。
D 不可中断休眠,通常是 IO 操作所处的状态
R 正在执行的或者处在等待执行的进程队列中
S 休眠中
T 暂停刮起的(比如Ctrl+Z),也可能是被 strace 命令调用中的状态
Z 僵尸进程,进程执行完成,但由于其父进程没有销毁该进程,而被init进程接管进行销毁。
W 没有使用物理内存,所占用的物理内存被切换到交换内存
< 高优先级的进程
N 低优先级
有时候一个进程会有多个状态的标志,比如SWN,SW

情景分析
前面两次top的输出那些信息值得关注?
Load average: 系统负载有降低的趋势,但仍然较高
Running: 有3个进程正在运行,正常,因为系统有4颗CPU
Cpu user: 接近200%了,有些大,服务高峰时可以接受
Cpu idle: 小于200%了,需要注意
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,应该开始留意它出现的频度,这往往是前面一种状况的先兆。


工具介绍- sysstat工具包
这个工具包提供了著名的 sar 命令,还有非常实用的 iostat, mpstat, sa1, sa2 等命令。  
这几个命令可实现前面提及工具大多数的功能,除此之外,还能查看系统的网络带宽状况、每块磁盘使用状况、每个磁盘分区的使用状况等。

sa1, sa2 这2个命令以配置在cron中定期执行,把系统当时的运行状况信息保存在磁盘上,每日存在一个文件中,因为有这个功能,因此 sar 工具不单是一个性能分析的工具,这2个命令的使用说明如下:
sa1 配置在cron中可以实现系统状态收集,比如10分钟运行一次
sa2 配置在cron中可以实现每日状态的汇总报告
你可以在系统crontab中添加如下配置:
*/10 * * * * root /usr/lib/sa/sa1 1 1
53 23 * * * root /usr/lib/sa/sa2 -A

工具介绍-其他
Iozone
IO和文件系统性能测试的工具,我也习惯用它作存储系统的性能分析。
Strace
如果我们知道一个程序执行效率很差,需要分析这个程序执行时的某个阶段或者某个系统调用的性能状况,可以使用 strace 命令。


TAG:

 

评分:0

我来说两句

Open Toolbar