如何监视和记录进程的内存/cpu 使用情况?

Art*_*kii 41 linux monitoring performance memory-usage

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

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

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

同样,理想情况下它会:

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

进程名称不是也不应该提前知道 - 想法是让它监控然后查看顶级违规者。

我的系统是 Linux (OpenSUSE)。

Bil*_*hor 21

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

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

运行munin并启用通知。这可能会让您有机会进入并观察服务器出现故障。您可能能够在问题出现之前纠正问题。

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

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


Pet*_*aut 15

sysstat几乎完全符合您的目的。


Nin*_*Cat 9

我以前用过:

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

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

  • @artem-russakovskii - 默认情况下,每十分钟将数据记录到一个文件中。如果您的服务器在 3:45 崩溃,您可以从 `atop -r log_filename` 开始,按 `m` 切换到每个进程的内存使用视图,然后按 `t` 以 10 分钟为增量向前移动直到 3 :40。您可以在 https://lwn.net/Articles/387202/ 阅读更多关于使用 atop 的基础知识,并在 http://www.atoptool.nl/download/case_leakage.pdf 查看识别内存泄漏的示例 (4认同)

PiL*_*PiL 7

你试过收集吗?
它非常强大且可定制。
有很多插件,可以与 nagios 集成。

http://collectd.org/features.shtml