top命令计算cpu占用率是通过读取/proc/stat(文件的详细格式介绍可以man proc查看)来计算的,
:~> cat /proc/stat
cpu 43235890 1694 4504236 72018498 522397 13011 24260 0 0
cpu0 43235890 1694 4504236 72018498 522397 13011 24260 0 0
intr 298785115 103 613 0 2 2 0 0 0 0 0 0 0 63483 0 1864702 3209260 0 78 16999165 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 632001273
btime 1267148235
processes 2273039
procs_running 2
procs_blocked 0
43235890表示 usr time
1694 nice time
4504236 system time
72018498 idle time
522397 iowait time
13011 irq time
24260 softirq time
0 steal_time
0 guest time
top命令计算cpu占用率的算法是,
先计算t1,t2两次采样间隔内各个cpu时间,
然后计算CPU在t1到t2时间段总的使用时间tot_frme = u_frme + s_frme + n_frme + i_frme + w_frme + x_frme + y_frme + z_frme = ( user2+ nice2+ system2+ idle2+ iowait2+ irq2+ softirq2 + steal_time2) - ( user1+ nice1+ system1+ idle1+ iowait1+ irq1+ softirq1 + steal_time1)
最后计算各个cpu时间利用率 = u_frme * scale = u_frme * (100.0 / (float)tot_frme), ......//这里的100是因为显示的是百分数
阅读(2282) | 评论(0) | 转发(0) |