我想让 Ubuntu Linux 16.10 系统监视器的 CPU 利用率百分比测量结果与ps
“pcpu”基本一致,即在具有四核的 Lenovo Thinkstation 桌面上运行的单个 Firefox 浏览器进程的 CPU 利用率百分比。
Ubuntu Linux 16.10 系统监视器首选项当前设置为:
Update interval in seconds: 3.00
Enable smooth refresh: Yes
Alert before ending or killing processes Yes
Divide CPU usage by CPU count : Yes
Firefox 进程的 ps 输出为:
$ ps -eo pid,rss,c,pcpu,cputime,cmd | grep firefox
2848 726024 3 3.5 00:50:23 /usr/lib/firefox/firefox -new-window
看完之后Linux:查看进程最后一秒的 CPU 使用情况,我学会了如何查看最后一秒的cpu使用情况。 Firefox 进程的顶部输出是:
$ top -b -d 1 | grep -in "firefox"
8: 2848 ratio 20 0 1980240 641516 115240 S 18.8 15.9 73:10.86 firefox
对于 Firefox 浏览器应用程序,我得到 3.5% 的 pcpu,ps -eo pid,rss,c,pcpu,cputime,cmd
而对于同一个 Firefox 浏览器应用程序,GUI 应用程序 Ubuntu 系统监视器显示 5% CPU 利用率。另外,我从 top -b -d 1 | 得到 15.9% 的 CPU 使用率grep - 在“火狐”中。当我们的 CPU 使用的 4 个核心除以 4 时,我得到 top 输出的 4.0%。
如何使ps
最高输出和系统监视器值一致?我应该启用“将 CPU 使用率除以 CPU 数量”复选框吗?
答案1
快速回答:不,这实际上不可能。
这里的问题首先是CPU“百分比”的概念。严格来说,这实际上并没有什么意义。 CPU 只有两种状态:要么正在处理某事(100%),要么正在等待。
因此,当报告某个进程的 CPU 使用率为 50% 时,并不意味着仅使用了 50% 的 CPU。这意味着在特定时间段内,CPU 将 50% 的时间花在进程上。例如,如果刷新间隔设置为 1 秒,CPU 在进程 N 上工作了半秒,则进程 N 的 CPU% 将显示为 50%。
考虑到这一点,我们可以看看检查 CPU% 的各种方法。对于ps
,其测量方式为(来自man ps
):
CPU usage is currently expressed as the percentage of time spent
running during the entire lifetime of a process. This is not ideal,
and it does not conform to the standards that ps otherwise conforms to.
CPU usage is unlikely to add up to exactly 100%.
因此,报告的百分比ps
实际上是进程整个生命周期的平均值。相比之下,top
报道称:
The task's share of the elapsed CPU time since the last screen
update, expressed as a percentage of total CPU time.
我假设gnome-system-monitor
工作方式类似,它的 CPU % 也是自上次刷新以来 CPU 在给定进程上花费的时间百分比。我的 C++ 知识基本上不存在,但以下几行来自proctable.cpp
(部分gnome-system-monitor
源代码)表明它确实取了自上次刷新以来的平均值:
/* FIXME: total cpu time elapsed should be calculated on an individual basis here
** should probably have a total_time_last gint in the ProcInfo structure */
glibtop_get_cpu (&cpu);
app->cpu_total_time = MAX(cpu.total - app->cpu_total_time_last, 1);
app->cpu_total_time_last = cpu.total;
所以不,你不能ps
同意,gnome-system-monitor
因为ps
显示了 CPU 在进程上花费的时间百分比自该过程开始以来并gnome-system-monitor
显示百分比自上次刷新以来。
我也无法想象为什么你需要让这两个值达成一致。我认为我们这里有某种XY问题。您可能想问一个新问题,描述您的最终目标是什么,您试图通过使两个价值观一致来解决什么问题。