Linux Process Accounting - “cp”和“cpu”字段之间的区别?

epi*_*c9x 7 linux monitoring process-accounting

我一直在考虑使用进程会计来跟踪运行在我们环境中存在问题的脚本的各种用户和站点,而不是尝试执行诸如定期抓取顶部之类的操作。

不是特别清楚的是哪些字段真正表示使用的 cpu 秒/分钟。我读过的手册页说'cpu'列是燃烧秒数,但是还有'cp'列显示 -m - 它们可以显示不同的总数。例如:

当我使用 -m 标志时,我得到

 $sa -m | grep username
 username 14944      65.53re      29.90cp     5308k
Run Code Online (Sandbox Code Playgroud)

当我使用 -u 标志并合计“cpu”的列时,我得到以下信息:

 sa -u |grep username|awk 'BEGIN{TOTAL=0}{TOTAL=TOTAL+$2}END{print TOTAL}'
 1032.86
Run Code Online (Sandbox Code Playgroud)

有人能帮我理解这两种不同模式下“cp”和“cpu”列之间的区别吗?

谢谢!

Pat*_*k R 6

让我用一个例子来帮助解释你上面的结果:

首先:我创建了一个 bash 脚本,我以用户 patrickr 身份运行该脚本,目的是在系统上施加足够的负载以引起注意。

#!/bin/bash
#this file is named loop_script.sh
for i in {1..5000}
do
   echo "Welcome $i times"
done
Run Code Online (Sandbox Code Playgroud)

第二:我卸载然后重新安装了 acct,这样我在 /var/log/acct 中的文件就会是最新的。创建 /var/log/acct/pacct 文件的副本,以便将来您可以使用格式正确的文件轻松截断该文件(您不能只是删除并重新创建文件 - 如果您这样做,sa 将停止工作)。请注意,此文件是系统上所有命令的日志,据我所知,无法根据时间段在日志中提取部分。

第三:然后我以 patrickr 的身份运行了两次这个脚本

patrickr@hostname:~$ bash loop_script.sh
Run Code Online (Sandbox Code Playgroud)

我会给你结果,然后我会解释它们:

以 root 身份(或除 patrickr 以外的任何用户)运行第一次循环后以 patrickr 身份运行:

**sa -m**
                            24       0.09re       0.03cp         0avio       894k
root                        22       0.07re       0.02cp         0avio       853k
patrickr                    2       0.02re       0.01cp         0avio      1336k

**sa -u |grep patrickr**

patrickr   0.38 cpu     1336k mem      0 io bash             
Run Code Online (Sandbox Code Playgroud)

在作为 patrickr 的第二个循环之后:

**sa -m**
                            30       0.09re       0.03cp         0avio       850k
root                        27       0.07re       0.02cp         0avio       814k
patrickr                    3       0.02re       0.01cp         0avio      1178k

**sa -u |grep patrickr**

patrickr   0.38 cpu     1336k mem      0 io bash            
patrickr   0.35 cpu     1336k mem      0 io bash            
patrickr   0.00 cpu      863k mem      0 io ls  (I happened to also run ls at patrickr)

**sa -u**

The results returned 106 results for a total of 2.86cpu that averaged to 0.03cp
Run Code Online (Sandbox Code Playgroud)

这是你所看到的:

sa -m 显示此服务器超时的所有活动的平均值。随着更多命令的运行,此文件会随着时间的推移而变大。

sa -u | grep patrickr 显示特定命令的系统和用户时间的总和(以 cpu 分钟为单位)。

运行:sa -u |grep patrickr|awk 'BEGIN{TOTAL=0}{TOTAL=TOTAL+$2}END{print TOTAL}'

将为您提供用户 patrick 的总和,但 sa -m 命令实际上是为您提供平均值。看看内存值是否需要第二个示例。他们也是平均的。

如果我将上面列出的 patrickr 的三个结果相加,0.35 + .37 + .0,然后除以 106,然后四舍五入到最接近的百分位,我将得到 0.01cp。

0.01cp 的结果是系统上用户 patrickr 的平均负载与自安装 acct 应用程序时(即自文件 /var/log/acct/pacct 开始跟踪)以来系统上的所有负载相比。

Output Fields
cpu   -  sum of system and user time in cpu minutes
re    -  actual time in minutes
k     -  cpu-time averaged core usage, in 1k units
k*sec -  cpu storage integral (kilo-core seconds)
u     -  user cpu time in cpu minutes
s     -  system time in cpu minutes
Run Code Online (Sandbox Code Playgroud)

beginlinux.com是一个对您有帮助的好资源(在这里找到原始链接)。