glorialiu

服务器性能监测工具调研随笔

一.性能监测与展现框架

1.     Cacti

使用RRDTool做展现,性能采集工具可自己添加

l  开源软件,用PHP编写,基于B/S结构。 

l  运用snmpget采集数据

l  使用rrdtool绘图。

l  它的界面非常漂亮,无需明白rrdtool的参数能轻易的绘出漂亮的图形

l  提供了强大的数据管理和用户管理功能,一张图是属于一个host的,每一个host又可以挂载到一个树状的结构上。用户的管理上,作为一个开源软件,它居然做到为指定一个用户能查看的host、甚至每一张图,还可以与LDAP结合进行用户的验证!

l  Cacti提供自己增加模板的功能,让你添加自己的snmp_queryscript

2. MRTG

Linux下用的最多的性能监视,可以算是框架吧,但是没啥可扩展性。使用SNMP协议

可以监测流量、cpu使用率、RAM使用率。

   优点:简单、易上手,基本安装完了之后只要更改一下配置文件即可。 

   缺点: 
  1、使用文本式的数据库,数据不能重复使用; 
  2、只能按日、周、月、年来查看数据; 
  3、只能画两个DS(一条线、一个块); 
  4、每取一次数据即需要绘图一次,浪费系统资源; 
  5、无管理功能;

二.展现工具

 1. RRDTool

     MRTG作者开发,RRDTool是一个强大的绘图的引擎,很多语言都可以调用RRDTOOL绘图。 

整个系统的架构是这样的: 
  基于SNMP协议,被监控端是服务器,或一些网络设备, 
  网络管理工作站,采用Linux(Freebsd)操作系统,并且安装Net-SNMP工具,使用RRDTOOL采集数据,存储数据,并用Cacti调用RRDTOOL显示出来。 
   rrdtool的优点: 
1
)使用rrd存储格式,数据能重复使用,如:可以将一个rrd文件中的数据与另一个rrd文件中的数据相加。 
2
)可以定义任意时间段画图,即你可以画出一张半年以来的数据的图,也可以画出一张半小时以来的图。 
3
)能画任意个DS 
4
CDEF让你能任意摆弄数据。

缺点: 
1
rrdtool的作用只是存储数据和画图,它没有mrtg中集成的数据采集功能; 
2
)在命令行的使用非常复杂,参数极多。 
3
)无管理功能。 
简单的说,rrdtool就是一个强大的绘图的引擎。

 

2.     kcachegrind

通常用来查看xdebug生成profile文件,多用来进行linux性能分析的图形展示

 

三.Linux性能数据的源头

l   CPU  

 在文件"/proc/stat"里面就包含了CPU的信息。每一个CPU的每一tick用在什么地方都在这个文件里面记着。后面的数字含义分别是:usernicesysidleiowait。有些版本的kernel没有iowait这一项。这些数值表示从开机到现在,CPU的每tick用在了哪里。例如:cpu0 256279030 0 11832528 1637168262就是cpu0从开机到现在有256279030 tick用在了user消耗,11832528用在了sys消耗。所以如果想计算单位时间(例如1s)里面CPU的负载,那只需要计算1秒前后数值的差除以每一秒的tick数量就可以了。gkrellm就是这样实现的:((200 * (v2 - v1) / CPU_TICKS_PER_SECOND) + 1) /2例如,第一次读取/proc/statuser的值是256279030;一秒以后再读一次,值是256289030,那么CPU在这一秒的user消耗就是:((200 * (256289030 - 256279030) / CPU_TICKS_PER_SECOND) + 1) /2 = ((10000 * 200 / 1000000) + 1) / 2 = 1%了。

l   内存消耗 

文件"/proc/meminfo"里面包含的就是内存的信息,还包括了swap的信息。例如:$ cat /proc/meminfo        total:    used:    free: shared: buffers: cached:Mem: 1057009664 851668992 205340672        0 67616768 367820800Swap: 2146787328 164429824 1982357504MemTotal:      1032236 kBMemFree:        200528 kBMemShared:           0 kB……不过从gkrellm的源代码看,有些版本没有前面那两行统计的信息,只能够根据下面的Key: Value这种各式的数据收集。

l   磁盘空间  

 gkrellm的源代码看,这个是一个很复杂的数据。磁盘分区的数据有可能分布在:/proc/mounts/proc/diskstats/proc/partitions等等。而且如果想要检查某几个特定的路径,还需要通过mountdf等命令的帮助。为了减少麻烦,这个数据我就直接用statfs函数直接获得了。int statfs(const char *path, struct statfs *buf);这个函数只需要输入需要检查的路径名称,就可以返回这个路径所在的分区的空间使用情况:总空间:buf.f_bsize * buf.f_blocks空余空间:buf.f_bsize * buf.f_bavail

l   磁盘I/O  

磁盘I/O的数据也同样比较复杂,有些版本看/proc/diskstats,有些版本看/proc/partitions,还有些版本至今我也不知道在那里看……不过可以看到数据的版本也像CPU那样,需要隔一段时间取值,两次取值的差就是流量。

l   网络流量  

网络流量也是五花八门,不过基本上都可以在/proc/net/dev里面获得。同样也是需要两次取值取其差作为流量值。

posted on 2010-09-14 21:37  刘元芳  阅读(662)  评论(0编辑  收藏  举报

导航