我发现很难理解 ps 和 top 产生的输出?
这是 top 的输出:
PID PSID USERNAME TID PRI NICE SIZE RES STATE TIME CPU COMMAND
26439 23712 soumyau 26439 15 0 7512M 5234M sleep 286:25 16.67% or_lse2 (18)
26523 23712 soumyau 26439 -2 0 7512M 5234M cpu9 143:10 8.33% or_lse2
26522 23712 soumyau 26439 -2 0 7512M 5234M cpu3 143:10 8.33% or_lse2
这是 ps( ps -L -p 26439 -o pcpu,psr,pid,user,tid
) 的:
%CPU PSR PID USER TID
99.9 3 26439 soumyau 26522
99.9 9 26439 soumyau 26523
0.0 8 26439 soumyau 26439
为什么两个结果会有差异?
你能简单解释一下这两个CPU%的意义吗?
答案1
ps
基于累积 CPU 使用率(自进程启动以来),其中 %CPU 是平均值(总计/时间)。
top
报告自上次采样以来的(平均)CPU 使用情况。
请参阅以下代码片段以供参考man ps
目前,CPU 使用率以进程整个生命周期中运行时间的百分比来表示。这并不理想,也不符合 ps 所遵循的标准。CPU 使用率不太可能精确达到 100%。
以及来自man top
自上次屏幕更新以来,任务所占的 CPU 时间份额,以占总 CPU 时间的百分比表示。在真正的 SMP 环境中,如果“Irix 模式”关闭,top 将以“Solaris 模式”运行,其中任务的 CPU 使用率将除以 CPU 总数。您可以使用“I”交互命令切换“Irix/Solaris”模式。
答案2
区别实际上只在于它是否除以核心数。
基本上附言显示输出不除以核心数
,而是顶部可以以两种模式操作
:
[SHIFT]+[I]切换到/从 Irix 模式
,或者你会看到与附言
答案3
“ps”命令按时间顺序显示所有进程。它拥有所有进程。它不关心进程状态(运行或休眠)。
“top”命令显示按最高顺序运行的进程。这就是您看到输出变化的原因。第一行中的某些进程在一段时间后会进入第二行或第三行,这取决于进程状态。