如何监控并记录进程随时间变化的内存/CPU 使用情况?

如何监控并记录进程随时间变化的内存/CPU 使用情况?

我正在寻找一种方法来诊断问题,例如交换死亡,其中膨胀的内存进程填满交换并杀死整个机器(例如apache)。

我已经在使用 cacti,而且我可以设置 nagios(虽然不想这样)或 munin,但据我所知,它们无法记录单个程序的使用情况 - 只能记录整体状态。

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

再次强调,理想情况下应该是:

  • 每N秒记录一次进程的内存使用情况
  • 每N秒记录一次进程的CPU使用率
  • 支持图表和历史记录
  • 支持平均值 - 例如 mysqld 在过去一天内使用了 43% 的 CPU 并且平均使用了 400MB 内存
  • 免费且开源

进程名称不是也不应该提前知道——这样做的目的是只是让它监视,然后查看主要违规者。

我的系统是 Linux(OpenSUSE)。

答案1

如果您只想找出最严重的违规者,请考虑top以相对较长的间隔(60 秒以上)在批处理模式下运行。您可能需要多次运行才能捕获多个资源上最严重的违规者。我已将系统配置为在资源过度使用时top运行几个周期。top

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

运行munin并启用通知。这可能让您有机会进入并观察服务器的宕机情况。您可能能够在服务器宕机之前解决问题。

对于内存泄漏,交换使用量的稳步增加表明存在问题。我曾经看到一台服务器在几天内慢慢死机。问题服务是一个监控其他进程内存泄漏的程序。系统管理员一直坚持认为交换使用量的增加不是问题,直到服务器停止响应。

您可能会发现,cfengine异常检测可用于触发脚本,以便在出现问题时捕获系统状态。除了使用最多资源的进程之外,您可能还需要很多信息。对于突然涌入的使用量,您可能需要一个网络连接列表(按地址而不是名称)。内存使用情况也很有用。

答案2

系统状态几乎完全是为了你的目的而制作的。

答案3

我以前用过 atop:

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

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

答案4

纳米是一款出色的工具,可以满足您的需求。专为 AIX 和 Linux 开发。可生成大量详细输出,并且易于生成报告。如果您在 Google 上搜索,会发现 IBM wiki 上有大量文档和用于解析数据的附加实用程序。

相关内容