Chinaunix

标题: 关于top命令 [打印本页]

作者: xxfihm_cu    时间: 2012-07-26 15:55
标题: 关于top命令
有个问题想请假大侠们:

top命令查看cpu占用的时候,第三行里的:

Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

和后面的某个具体进程的%CPU 他们之间是什么关系呢?

为什么有时候Cpu(s)里的us不是很高,id也比较大,也就是空闲cpu比较多,
而下面的某个进程的%CPU却可能达到100%,甚至超过100%到101%之类的?
看了man top没找到具体某个进程使用的%CPU的说明,只是提到了上面综合的cpus的说明:
   k: %CPU  --  CPU usage
          The task’s share of the elapsed CPU time since the last screen update, expressed as a  percentage  of  total
          CPU  time.   In  a  true  SMP environment, if ’Irix mode’ is Off, top will operate in ’Solaris mode’ where a
          task’s cpu usage will be divided by the total number of CPUs.  You toggle ’Irix/Solaris’ modes with the  ’I’
          interactive command.


请求解答啊 google了下也没找到合适的答案


作者: ulovko    时间: 2012-07-26 16:04
哈哈,让鸟哥来帮您解答吧,您看可以嘛! ^_^
在线:  http://linux.vbird.org/linux_basic/0440processcontrol.php#top
离线简体中文鸟哥私房菜:  http://bbs.chinaunix.net/thread-3757881-1-1.html
作者: xxfihm_cu    时间: 2012-07-26 16:08
多谢兄台 看看先~~回复 2# ulovko


   
作者: xxfihm_cu    时间: 2012-07-26 16:16
貌似没有我的问题答案哦,鸟哥的这个解答我之前也看过的
回复 2# ulovko


   
作者: xxfihm_cu    时间: 2012-07-26 17:05
有人回答么  ~~~~~ 不能沉啊
作者: xxfihm_cu    时间: 2012-07-26 17:17
ding..........................
作者: ulovko    时间: 2012-07-26 17:23
本帖最后由 ulovko 于 2012-07-26 17:27 编辑

关于top的详细解释:  http://blog.chinaunix.net/uid-25256412-id-2951196.html

  1. 第一行显示的内容和uptime命令一样,【l】可以显示和隐藏这个区域:


  2. top:   这个没有什么意思,只是个名称而以

  3. 01:47:56 :     系统当前时间

  4. up 1:26   :   系统开机到现在经过了多少时间

  5. 2 users  :            当前2用户在线

  6. load average:0.00,0.00,0.00:        系统1分钟、5分钟、15分钟的CPU负载信息

  7. 第二行:


  8. Tasks:英文意思是工作;任务;差事。

  9. 38 total:很好理解,就是当前有38个任务,也就是38个进程。

  10. 1 running:1个进程正在运行

  11. 37 sleeping:37个进程睡眠

  12. 0 stopped:停止的进程数

  13. 0 zombie:僵死的进程数

  14. Cpu(s):表示这一行显示CPU总体信息

  15. 0.0%us:用户态进程占用CPU时间百分比,不包含renice值为负的任务占用的CPU的时间。

  16. 0.7%sy:内核占用CPU时间百分比

  17. 0.0%ni:renice值为负的任务的用户态进程的CPU时间百分比。nice是优先级的意思

  18. 99.3%id:空闲CPU时间百分比

  19. 0.0%wa:等待I/O的CPU时间百分比

  20. 0.0%hi:CPU硬中断时间百分比

  21. 0.0%si:CPU软中断时间百分比

  22. 0.0%st:我不知道

  23. 第三行:


  24. Men:内存的意思

  25. 256412k total:物理内存总量

  26. 30156k used:使用的物理内存量

  27. 226256 free:空闲的物理内存量

  28. 8176k buffers:用作内核缓存的物理内存量

  29. Swap:交换空间

  30. 337356k total:交换区总量

  31. 0k used:使用的交换区量

  32. 337356k free:空闲的交换区量

  33. 12160k cached:缓冲交换区总量

  34. 第四行:


  35. PID:进程的ID

  36. USER:进程所有者

  37. PR:进程的优先级别,越小越优先被执行

  38. NInice:值

  39. VIRT:进程占用的虚拟内存

  40. RES:进程占用的物理内存

  41. SHR:进程使用的共享内存

  42. S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数

  43. %CPU:进程占用CPU的使用率

  44. %MEM:进程使用的物理内存和总内存的百分比

  45. TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。

  46. COMMAND:进程启动命令名称

  47. Linux top命令操作指令

  48. 下面我列出一些常用的linux top命令操作指令:

  49. q:退出top命令

  50. <Space>:立即刷新

  51. s:设置刷新时间间隔

  52. c:显示命令完全模式

  53. t::显示或隐藏进程和CPU状态信息

  54. m:显示或隐藏内存状态信息

  55. l:显示或隐藏uptime信息

  56. f:增加或减少进程显示标志

  57. S:累计模式,会把已完成或退出的子进程占用的CPU时间累计到父进程的MITE+

  58. P:按%CPU使用率排行

  59. T:按MITE+排行

  60. M:按%MEM排行

  61. u:指定显示用户进程

  62. r:修改进程renice值

  63. kkill:进程

  64. i:只显示正在运行的进程

  65. W:保存对top的设置到文件~/.toprc,下次启动将自动调用toprc文件的设置。

  66. h:帮助命令。
复制代码

作者: xxfihm_cu    时间: 2012-07-26 17:49
29.Cpu(s):表示这一行显示CPU总体信息

30.

31.0.0%us:用户态进程占用CPU时间百分比,不包含renice值为负的任务占用的CPU的时间。
-------------------
89.%CPU:进程占用CPU的使用率

---------------------------->>>>>还是不明白啊,我问的是这两个参数有什么区别和联系,为什么有时候某个进程的CPU都达到100%了,
而前面的Cpu(s)那行却还是比较低呢
作者: ulovko    时间: 2012-07-26 17:54
本帖最后由 ulovko 于 2012-07-26 17:54 编辑
为什么有时候某个进程的CPU都达到100%了,
而前面的Cpu(s)那行却还是比较低呢

请具体谈谈 这一行 哪个值低 O_o
作者: xxfihm_cu    时间: 2012-07-26 17:56
Cpu(s):  1.0%us
====就是这个值 就算加上sy的值也比较低。

回复 9# ulovko


   
作者: ulovko    时间: 2012-07-26 17:58
回复 10# xxfihm_cu


    idle值 是多少?
作者: xxfihm_cu    时间: 2012-07-26 17:59
top - 17:54:44 up 8 days,  5:26,  5 users,  load average: 1.98, 1.92, 0.94
Tasks: 203 total,   1 running, 202 sleeping,   0 stopped,   0 zombie
Cpu(s):  6.2%us,  1.3%sy,  0.0%ni, 91.9%id,  0.2%wa,  0.0%hi,  0.4%si,  0.0%st
Mem:   8162200k total,  6371664k used,  1790536k free,   237964k buffers
Swap: 10223608k total,       16k used, 10223592k free,  4272696k cached

  PID USER      PR  NI  VIRT  RES  SHR S      %CPU %MEM    TIME+  COMMAND                                                               
5537 xiaoxuef  18   0  260m  64m 2908 S 38.2  0.8   1:25.19 GameServer   
======其他的进程我就不列出来了 这里的gameserver进程cpu就已经38%了,但是 第二行的us+sy加起来都只有%7左右

这俩个cpu分别具体代表什么意思呢?
作者: ulovko    时间: 2012-07-26 18:04
6.2%us,  1.3%sy,  91.9%id,

us == 用户占用cpu
The user processes are average everyday programs—perhaps daemons
run by root, or commands run by regular users, or whatever. If it shows up in
ps -ax, it’s a user process.

sy == 内核占用cpu
The system value gives the total percentage of CPU time spent by OS
running kernel processes and the userland processes in the kernel. These
include things such as virtual memory handling, networking, writing to disk,
debugging with INVARIANTS and WITNESS, and so on.

id == 空闲
作者: xxfihm_cu    时间: 2012-07-26 18:10
恩  这个我明白的 id空闲就是91%了,  为什么gameserver的那个进程还会占用38.2 %的cpu呢?

回复 13# ulovko


   
作者: ulovko    时间: 2012-07-26 18:12
回复 14# xxfihm_cu


    您是几核心 CPU ^_^
作者: xxfihm_cu    时间: 2012-07-26 18:38
8核  不过Cpu(s)里显示的是所有cpu的平均值吧?
作者: xxfihm_cu    时间: 2012-07-26 18:39
8核回复 15# ulovko


   
作者: xxfihm_cu    时间: 2012-07-27 09:29
有人能告诉我么  谷歌不到合适的解答啊
作者: ulovko    时间: 2012-07-27 09:36
xxfihm_cu 发表于 2012-07-27 09:29
有人能告诉我么  谷歌不到合适的解答啊

兄弟 我特别佩服您的学习态度 和 毅力 加油!
PS: 到底还有什么问题呢? ^_^
作者: xxfihm_cu    时间: 2012-07-27 10:05
本帖最后由 xxfihm_cu 于 2012-07-27 10:08 编辑

根据我的猜测,自己写了个小程序,8核,开5个线程,每个线程都让他死循环,也就是都让他们占用cpu到100%,测试结果如下:
----------------for avg cpu--------------------------------------------------
top - 09:53:44 up 8 days, 21:25,  4 users,  load average: 2.15, 2.00, 2.19
Tasks: 187 total,   1 running, 186 sleeping,   0 stopped,   0 zombie
Cpu(s): 66.1%us,  2.1%sy,  0.0%ni, 30.5%id,  0.5%wa,  0.0%hi,  0.7%si,  0.0%st
Mem:   8162200k total,  7354864k used,   807336k free,   192804k buffers
Swap: 10223608k total,       16k used, 10223592k free,  4813316k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                               
6644 xiaoxuef  17   0 64976 1012  844 S 499.5  0.0   2:00.49 t   

----------------for every cpu--------------------------------------------------
top - 09:53:55 up 8 days, 21:25,  4 users,  load average: 3.23, 2.24, 2.27
Tasks: 190 total,   2 running, 188 sleeping,   0 stopped,   0 zombie
Cpu0  : 91.7%us,  0.0%sy,  0.0%ni,  8.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  : 99.2%us,  0.0%sy,  0.0%ni,  0.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  : 92.2%us,  0.9%sy,  0.0%ni,  4.0%id,  2.8%wa,  0.0%hi,  0.2%si,  0.0%st
Cpu3  : 33.6%us,  4.8%sy,  0.0%ni, 61.2%id,  0.2%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu4  : 89.1%us,  0.1%sy,  0.0%ni, 10.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  : 25.7%us,  4.6%sy,  0.0%ni, 67.2%id,  1.9%wa,  0.0%hi,  0.6%si,  0.0%st
Cpu6  : 20.4%us,  8.8%sy,  0.0%ni, 69.1%id,  1.7%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  : 90.7%us,  0.2%sy,  0.0%ni,  5.6%id,  0.0%wa,  0.2%hi,  3.4%si,  0.0%st
Mem:   8162200k total,  7479036k used,   683164k free,   193148k buffers
Swap: 10223608k total,       16k used, 10223592k free,  4927844k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                               
6644 xiaoxuef  17   0 64976 1012  844 S 498.5  0.0   2:56.10 t      

说明:
1、summary里的cpu,如果只是显示一行,则是所有cpu的平均数,而实际us占用的百分比为这个平均数*核数,
2、具体某个进程里的%cpu则是他在所有cpu中占用us的总和,并不是平均数。
此例中,for avg cpu可以看出:t这进程占用了cpu的499.5%, 而总共的us占用cpu为66.1*8=528.8, 在加上一些在wa,等的占用时间,
可以大致估计出t这进程占用cpu是较高的。

如此也就合理的解释了为什么某个进程的cpu占用率超过100%,而summary里的永远不到100%。
作者: DiDeCrouse    时间: 2012-07-27 10:08
LZ的学习精神赞一个,ulovko的耐心回答也赞一个
作者: 惟吾无为    时间: 2012-07-28 09:17
info top
耐心读吧
作者: xxfihm_cu    时间: 2012-07-30 10:26
多谢哥们的耐心解答哈~~  回复 19# ulovko


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2