Linux 进程记帐 - ‘cp’ 和 ‘cpu’ 字段之间的区别?

Linux 进程记帐 - ‘cp’ 和 ‘cpu’ 字段之间的区别?

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

不太清楚的是哪些领域真的表示 CPU 使用的秒数/分钟数。我读过的手册页说“cpu”列表示消耗的秒数,但是 -m 还显示了“cp”列,它们可以显示不同的总数。例如:

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

 $sa -m | grep username
 username 14944      65.53re      29.90cp     5308k

当我使用 -u 标志并计算“cpu”列的总和时,我得到以下结果:

 sa -u |grep username|awk 'BEGIN{TOTAL=0}{TOTAL=TOTAL+$2}END{print TOTAL}'
 1032.86

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

谢谢!

答案1

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

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

#!/bin/bash
#this file is named loop_script.sh
for i in {1..5000}
do
   echo "Welcome $i times"
done

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

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

patrickr@hostname:~$ bash loop_script.sh

我会告诉你结果并进行解释:

以 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             

经过 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

以下是您所看到的内容:

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 的三个结果相加,即 .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

一个可以帮到你的好资源是beginlinux.com(找到原始链接这里)。

相关内容