我想绘制以下情况的图表(图形输出会很棒,即 .png 文件):我有用户 A、B 和 C。我限制他们的资源,这样当所有用户同时运行 CPU 密集型任务时,这些进程将使用 25%、25% 和 50% 的 CPU。我知道我可以使用获取实时统计数据,top
但不知道如何处理它们。我搜索了庞大的top
手册页,但没有找到太多关于输出可以绘制图表的数据的信息。理想情况下,图表将显示大约 30 秒的跨度。有什么想法如何实现吗?
答案1
我知道我可以使用 top 获取实时统计数据,但不知道如何处理它们
批处理模式可能有用:
-b : Batch mode operation
Starts top in ’Batch mode’, which could be useful for sending output from top to other programs or
to a file. In this mode, top will not accept input and runs until the iterations limit you’ve set
with the ’-n’ command-line option or until killed.
例如:
$ top -b -n 1 -u <user> | awk 'NR > 7 { sum += $9 } END { print sum }'
Ganglia Gmetric可以用来绘制此图表。
cpu_per_user_gmetric.sh
#!/bin/bash
USERS="a b c"
for user in $USERS; do
/usr/bin/gmetric --name CPU_per_"$user"_user --value `top -b -n 1 -u $user | awk 'NR>7 { sum += $9; } END { print sum; }'` --type uint8 --unit Percent
done
crontab -l
* * * * * /path/to/cpu_per_user_gmetric.sh
结果如下:
答案2
该tload
命令通过 ASCII 图表来表示平均系统负载的图形表示。此命令可用于在终端上提供图表。该命令的语法为:
tload [options] [terminal]
如果未提供终端作为此命令的参数,则默认情况下它会在当前终端上输出图表。因此,此命令的最简单形式是:
$ tload
答案3
也许你可以使用collectd
并调整其中一个可用插件? 是的,列出的这些都不能完全满足您的要求,但另一方面,它们修改起来相当简单,我认为您可以从例如processes
插件开始,然后从那里开始工作。
答案4
尝试收集sar
并sadf
准备数据以便于绘制图表。http://sebastien.godard.pagesperso-orange.fr/documentation.html