监控总 CPU 时间的最公平方法是什么 - 每个用户?

Ste*_*zzo 26 cpu-load kernel proc uptime

在多用户系统上,我想以 CPU 时间的秒数来衡量每个用户的 CPU 使用率。出于此测量的目的,我假设如果 PID 属于某个用户,则该用户会导致 CPU 时间 - 即我忽略了守护程序和内核。

目前我正在这样做,每五秒钟:

  1. 获取每个用户和他们正在运行的 PID ps aux
  2. 对于每一个PID,得到x的总和,UTIME,cutime,STIME和cstime从/proc/[pid]/stat
  3. 计算t = x / interval(高负载时间隔并不总是恰好 5 秒)

如果我运行这个,我会得到合理的值。例如:这个系统上的一个用户在 python ( while True: pass) 中旋转,系统显示大约每秒 750 毫秒的 CPU 时间。当系统挂了一点时,它报告了 1600 毫秒的 1 秒 inverval。这似乎是正确的,但我不明白这些价值观可能具有欺骗性,特别是考虑到我并不真正理解它们。

所以我的问题是:

在每个用户的基础上衡量 CPU 负载的公平和正确的方法是什么?

该方法必须相当准确。该系统上可能有数百个用户,因此从中提取百分比ps aux将不够准确,特别是对于许多软件喜欢生成的短期线程。

虽然这可能很复杂,但我绝对知道这是可能的。这是我的出发点:

内核会跟踪进程的创建时间以及它在其生命周期中消耗的 CPU 时间。每个时钟滴答,内核都会更新当前进程在系统和用户模式下花费的时间,以 jiffies 为单位。—(来自Linux 文档项目

我追求的值是用户在 CPU 上花费的秒数(或 jiffies),而不是系统负载或 CPU 使用率的百分比。

在进程仍在运行时测量 CPU 时间很重要。有些进程只会持续半秒,有些会持续数月——我们需要同时捕捉这两种情况,以便我们可以细粒度地考虑用户的 CPU 时间。

Ala*_*ell 13

听起来您需要流程会计。

http://www.faqs.org/docs/Linux-mini/Process-Accounting.html

在 Ubuntu 上,进程记帐工具在acct包中 安装帐户

要获取每个用户的报告,请运行

sa -m
Run Code Online (Sandbox Code Playgroud)