如何随着时间的推移监视和logging进程的内存/ CPU使用情况?

我正在寻找一种诊断问题的方法,比如交换死亡,在这个过程中,一个内存溢出的进程填满swap并杀死整个机器(比如apache)。

我已经在使用仙人掌,而且我可以设置nagios(虽然宁可不)或者munin,但是据我所知,他们不能logging单个程序的使用情况 – 只是总体状态。

我知道我可以每隔30秒将一个脚本滚动到某个文件,但是我想看看现有的成熟解决scheme是否已经存在。

再一次,理想情况是:

  • 每N秒logging进程的内存使用情况
  • 每N秒logging进程的CPU使用情况
  • 支持图表和历史
  • 支持平均值 – 比如mysqld在最后一天使用了43%的CPU,平均值为400MB的内存
  • 自由和开源

进程名不是,也不应该事先知道 – 这个想法是让它监视,然后看看顶尖的罪犯。

我的系统是Linux(OpenSUSE)。

    你只是想要顶尖的犯人,考虑在批处理模式下以相对较长的时间间隔(60秒加上)跑top 。 您可能需要多个top运行来捕获多个资源上的顶级违规者。 我已经configuration系统在资源过度使用的情况下运行几个周期。

    考虑以批处理模式运行sar来捕获资源利用率。 我意识到这是基于服务器,但确定发生问题的时间是有用的。

    运行munin并启用通知。 这可能会让你有机会进入并观察服务器closures。 您可能可以在问题发生之前纠正问题。

    对于内存泄漏,交换使用的稳步增加表明存在问题。 我曾经看过一个服务器在一段时间内慢慢死去。 问题服务是监视其他内存泄漏进程的程序。 系统pipe理员坚持认为越来越多的交换使用不成问题,直到服务器停止响应。

    你可能会发现cfengine的exception检测可以用来触发一个脚本来捕捉系统状态,当出现问题时。 除了使用最多资源的进程之外,您可能还需要大量的信息。 对于突然涌入的使用情况,您可能需要一个networking连接列表(通过地址而不是名称)。 内存使用也是有用的。

    sysstat几乎完全是为了你的目的。

    我之前用过:

    http://freshmeat.net/projects/atop/

    “Atop是一个ASCII全屏性能监视器,能够报告所有进程的活动(即使进程在间隔期间已经完成),每天logging系统和进程活动以进行长期分析,通过使用高亮的系统资源颜色等。定期显示与CPU,内存,交换,磁盘和networking层相关的系统级活动,并为每个活动进程显示CPU利用率,内存增长,优先级,用户名,状态,并退出代码“。

    你有没有试过collectd?
    这是非常强大的和可定制的。
    有很多的插件,可以与纳吉奥斯集成。

    http://collectd.org/features.shtml

    位于Nagios之上的Centreon与NRPE结合在一起。 然后,您可以编写自定义脚本以任何您希望NRPE的格式报告数据。 然后,Nagios使用NRPE从远程服务器轮询数据,而Centreon制作了一张漂亮的图表,并增加了大量的用户灵活性。 我们使用它在http://beyondhosting.net我有一个VZ容器模板与centreon + nagios设置已经如果你想要它。

    graphicscentreonbuild立hostthenpost.org/tyler/2010-07-23_1719.png

    nmon是一个很棒的工具,可以做你想要的。 针对AIX和Linux开发。 产生大量详细的输出并且易于报告。 如果你是谷歌,那么就有一个IBM wiki,它有大量的文档和额外的工具来parsing数据。

    服务器密度正是你所描述的。

    我在我们的一台生产服务器上使用它,我非常高兴。 它的最大特点是能够查看图表,点击峰值并查看当前时间的服务器CPU /内存消耗,包括所有正在运行的进程。 他们称之为快照

    它不断在改进。 最新function之一是exception检测 ,可以让您轻松检测exception情况。 您还可以设置各种阈值

    http://studyhat.blogspot.com/2010/08/user-activity-view-processes-display.html

    看看上面的链接小内码给你的内存cpu等

    当我提出类似的问题时,提出了答案:

    伊卡潘 说 :

    Munin是在安装和configuration过程中以最less的努力获得正常运行时间图表的最简单方法。 我也使用atop来处理某些进程的CPU使用情况,但这不是你要求的。

    大卫Spillet 说 :

    我使用collectd来logging其他一些参数中的系统负载。 它将数据存储在RRD存储中,可以使用许多可用的工具和脚本进行graphics化分析。 我使用这个脚本的修改版本作为我的graphics( 示例输出 )。

    Collectd拥有插件来监视大量的东西(通常要求的东西以及顶部的东西),如果你需要一些专门的东西,创build你自己的东西不应该是困难的,所以使得一个非常灵活的工具。 在rrd.cgi中configurationgraphics是一个非常手动的过程,虽然不难,尽pipe您可能会发现更方便的工具来处理由collectd维护的RRD文件。

    你也可以检查Nagios或OpenNMS 。

    Munin将不需要Nagios或任何其他工具就可以完成所有你需要的function。 有些RPM可用于OpenSUSE。

    也许好的旧的OProfile做你所需要的? 这是一个基于内核的系统级分析器,只有很小的(几个百分点)开销。

    然后有一个很好的Perl脚本PSMon ,它允许你设置所有types的CPU /内存限制。 如果超过,那么psmon将logging错误和/或杀死违规进程。

    后者不会产生任何分析报告给你,但如果它决定一遍又一遍地杀死同样的过程,你可能已经find了你正在寻找的讨厌的混蛋。 🙂