余海鹏

余海鹏的博客

他的个人主页  他的博客

[求助]帮忙设计一个简单的数据分析算法

余海鹏  2010年04月25日 星期日 23:30 | 2152次浏览 | 7条评论

需求:

      输入的数据:使用nmon在AIX上收集的性能数据,分两种周期:一周和一天。

      输出的数据:服务器一周内的忙时时段与闲时时段,以及变化趋势。

      一周的数据采样间隔是10分钟,也就是说每10分钟收集一次数据,持续收集一周。而一天为周期的数据收集采样间隔是5分钟。

      使用这些数据我们可以绘制出机器在数据采集周期内的性能图表。现在我们需要设计一个算法,根据CPU的运行数据,计算出这一周的忙时与闲时基线,通过这条基线就可以判断这一周内,这台机器的哪些时段是处于忙时的。就是CPU使用率超过忙时基线的时候,就判断是忙时,低于闲时基线的时候,就判断是闲时,但是实际的计算方式应该要再复杂一点,因为还会涉及到持续时间的因素。接下来还可以基于这些结果做趋势分析。

使用CPU数据编制的图表例子:

我目前有两种方法用来计算这两条基线的:

第一种,比较简单直接,使用一周的数据计算CPU使用率平均值,之后取各个峰值(分为高低峰两种)节点数据算其平均值分别为Ah和Al,数据的总平均值为A,那么闲时基线为:A-m(A-Al),忙时基线为:A+m(Ah-A),其中m为权值,m可用不同的方法得出,例如((Al/A)+(A/Ah))/2,最后用这两条基线对每天的数据进行处理,确定一个时间范围T,只有时间间隔大于T的才计入忙闲时;

第二种,使用7天的单天数据,对每天相同时刻的数据取平均值,用这些点就可以构建一个周期为一天的数据模型,所得出的图表曲线相比较实际的单天数据会平缓一些,之后检查各个峰值节点,确定一个时间范围T,以一个峰值节点为中心查找两边的点,找到两边拐点,如果两个拐点之间的时间间隔大于T,则确定这是一个忙时或闲时。

因为感觉这两种方法实在太简陋,觉得这样的统计不够科学,所以之前没有贴出来,请大家见谅,呵呵。

请有相关算法设计经验的老大赐教!

评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !
黄翀

回复 黄翀  2010年04月26日 星期一 14:05

一直想认真学学算法,不知道从哪儿开始合适

0条回复

孔志奎

回复 孔志奎  2010年04月26日 星期一 10:24

至少, 你应该先拿出一个自己的设计来

自己什么努力都没做, 就来问, 这种习惯非常不好

1条回复

  • 余海鹏

    回复 余海鹏  2010年04月26日 星期一 14:16

    恩,已经把自己的两个想法贴出来了,谢谢你的意见!

    0条回复

小包

回复 小包  2010年04月26日 星期一 08:57

会害了你的!

3条回复

  • 张家瑞

    回复 张家瑞  2010年04月26日 星期一 09:18

      • 小包

        回复 小包  2010年04月26日 星期一 09:25

        应该自己实现 ,哪里遇到问题问哪里 那样才有成就感和理解其本意!

        1条回复

          • 余海鹏

            回复 余海鹏  2010年04月26日 星期一 14:15

            已经把我的两种思路贴出来了,主要就是不知道用什么数学模型来得出忙闲时基线会比较合理科学,请赐教!多谢

            0条回复

暂时没有评论

Zeuux © 2024

京ICP备05028076号