我想知道我的 Linux 机器每分钟的 CPU 利用率。我尝试使用,sar
但我得到的是 10 分钟间隔的结果。我如何获取每分钟的结果?
答案1
您可以使用 cron 和一些简单的 shell 命令来完成此操作,这些命令重量轻并且不会引入太多额外负载,从而避免扭曲结果。
我刚刚整理了一个:
aq> crontab -l
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
* * * * * uptime | sed 's/.*://' | cat - /tmp/cputime | head -180 > /tmp/cputime2 ; mv /tmp/cputime2 /tmp/cputime
aq> cat /tmp/cputime
1.28, 0.73, 0.56
0.38, 0.41, 0.45
0.38, 0.41, 0.45
0.38, 0.41, 0.45
0.38, 0.41, 0.45
0.38, 0.41, 0.45
这会将帖子置顶到文件中,并且仅保留最后 180 分钟 = 3 小时的输出。
答案2
我尝试使用
sar
,但得到的结果是 10 分钟间隔的结果。如何按分钟获取结果?
sar
读取 sysstat 工具集中的脚本写入的文件。Sysstat 使用 cronsa1
定期运行。在我的 Kubuntu 中,相关文件是/etc/cron.d/sysstat
。此行
5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
负责debian-sa1
每 10 分钟运行一次(debian-sa1
是一个包装器sa1
;如果您的发行版既不是 Debian 也不是其衍生产品,sa1
那么您可能应该使用 sole)。
修改此行以获得您想要的(无需重启 cron两种方式:
更改时间表。直接每分钟运行该工具:
* * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
更改命令。
sa1
本身可以迭代测量,语法是sa1 interval count
。每十分钟运行一次该工具,但让每次调用以 60 秒的间隔进行 10 次测量:5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 60 10
(注意在这种情况下
5-55/10
也可能是*/10
)。
后一种方法似乎过于复杂,但如果您想每分钟进行多次测量,这种方法很有用。 Cron 不会精确到分钟以下,而是sa1
使用秒。示例:
* * * * * root command -v debian-sa1 > /dev/null && debian-sa1 10 6
意思是“每分钟进行 6 次测量,间隔 10 秒”。这里 cron 负责“每分钟”部分,然后每个新sa1
进程进行“6 次测量,间隔 10 秒”。
设置完成后,只需sar
调用即可获取“过去 2-3 小时”的数据(尝试使用-s
和-e
选项,请参阅man 1 sar
详细信息)。