2014年4月20日星期日

Linux_035:常用命令之六:top

top 命令能够实时显示系统中各个进程的资源占用状况。

# top

top - 16:20:18 up 82 days,  2:07,  2 users,  load average: 0.00, 0.00, 0.00
Tasks: 269 total,   1 running, 268 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  16457696k total,  2580412k used, 13877284k free,   296768k buffers
Swap: 20479992k total,        0k used, 20479992k free,   688564k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                            
13898 root      20   0 15064 1404  956 R  0.3  0.0   0:00.10 top                                                
18130 root      20   0 9403m 705m  19m S  0.3  4.4 109:35.46 java                                                
    1 root      20   0 19112 1424 1176 S  0.0  0.0   0:15.75 init                                            
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.02 kthreadd                                            
    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0                                        
    4 root      20   0     0    0    0 S  0.0  0.0   0:00.13 ksoftirqd/0                                        
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0                                          
    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/1                                        
    7 root      20   0     0    0    0 S  0.0  0.0   0:00.11 ksoftirqd/1                                        
    8 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/1                                          
    9 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/2                                        
   10 root      20   0     0    0    0 S  0.0  0.0   0:00.01 ksoftirqd/2                                        
   11 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/2                                          
   12 root      RT   0     0    0    0 S  0.0  0.0   0:00.07 migration/3                                        
   13 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/3                                        
   14 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/3                                          
   15 root      RT   0     0    0    0 S  0.0  0.0   0:00.01 migration/4    

说明:

1. 第 1-5 行是当前系统情况整体的统计信息区

1.1 第 1 行是任务队列信息,包括:
(1)当前系统时间。
(2)系统持续运行的时间。
(3)当前登录用户数。
(4)load average后面的三个数分别是1分钟、5分钟、15分钟前到现在的负载平均值。
load average 数据是每隔 5 秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。
如果这个数除以逻辑 CPU 的数量,结果高于 1 的时候就表明系统在超负荷运转了。

1.2 第 2 行是任务信息,包括:
(1)total - 当前系统中的进程总数量。
(2)running - 处于运行状态的进程数量。
(3)sleeping - 处于休眠状态的进程数量。
(4)stopped - 处于停止状态的进程数量。
(5)zombie - 处于僵尸状态的进程数量。

1.3 第 3 行是CPU状态信息,包括:
(1)us - 用户空间占用CPU的百分比。
(2)sy - 内核空间占用CPU的百分比。
(3)ni - 改变过优先级的进程占用CPU的百分比。
(4)id - 空闲CPU百分比。
(5)wa - IO等待占用CPU的百分比。
(6)hi - 硬中断(Hardware IRQ)占用CPU的百分比。
(7)si - 软中断(Software Interrupts)占用CPU的百分比。

1.4 第 4 行是内存状态信心,包括:
(1)total - 物理内存总量。
(2)used - 已经使用的内存总量,是内核可“控制”的内存数量。
注意,被“控制”的内存不见得都在实际使用中,内核有自己的考虑:比如内核并不会把对象已经释放的内存交还给free。
(3)free - 空闲的内存总量,还未被内核纳入“控制”的内存数量。
(4)buffers - 存的内存总量。

1.5 第5行是swap交换分区信息,包括:
(1)total - 交换区总量。
(2)used - 使用的交换区总量。
注意,要特别关注used数值,如果它在不断的变化,说明内核在不断进行内存和swap的数据交换,即内存不够用了。
(3)free - 空闲交换区总量。
(4)cached - 缓冲的交换区总量。

2. 第 7 行以下是各进程(任务)的状态监控,项目列信息说明如下:
(1)PID - 进程id。
(2)USER - 进程所有者。
(3)PR - 进程优先级。
(4)NI - nice值,负值表示高优先级,正值表示低优先级。
(5)VIRT - 进程使用的虚拟内存总量,单位kb,VIRT=SWAP+RES。
(6)RES - 进程使用的、未被换出的物理内存大小,单位kb,RES=CODE+DATA。
(7)SHR - 共享内存大小,单位kb。
(8)S - 进程状态,D=不可中断的睡眠状态、R=运行、S=睡眠、T=跟踪/停止、Z=僵尸进程。
(9)%CPU - 上次更新到现在的CPU时间占用百分比。
注意,这里%CPU指的是逻辑CPU百分比,如果你有8个逻辑CPU,理论上该值最大可达800%。
也就是说,该值是每个逻辑CPU百分比的总和,是可以超过100%的。
(10)%MEM - 进程使用的物理内存百分比。
(11)TIME+ - 进程使用的CPU时间总计,单位1/100秒。
(12)COMMAND - 进程名称(命令名/命令行)。

3. 高级操作
(1)按下 L 键,打开或关闭显示 load(第 1 行)内容。
(2)按下 T 键,打开或关闭显示 thread(第 2、3 行)行内容。
(3)按下 M 键,打开或关闭显示 memory(第 4、5 行)行内容。
(4)加重显示当前运行(S=R)的进程
默认进入 top 时,(S=R)的进程字体是被加重显示的,按下 Y 键可以关闭/打开加重显示效果。
(5)整行加重反显当前运行(S=R)的进程
在加重显示当前运行(S=R)的进程情况下,按下 B 键(Bold)可以关闭/打开整行加重反显效果。
(6)加重显示显示排序列
默认进入 top 时,进程是按照 CPU% 来排序的,按下 X 键可以打开/关闭加重显示效果。
(7)整列加重反显排序列
在加重显示排序列的情况下,按下 B 键(Bold)可以关闭/打开整列加重反显效果。
(8)通过“shift + >”或“shift + <”可以向右或左改变排序列。
通过“shift + > + R”或“shift + < + R ”可以向右或左改变排序列,并倒序排列。
(9)top -c 可以显示 COMMAND 列完整的命令行。
(10)top -p [PID] 显示指定进程的信息。
(11)监控每个逻辑CPU的状态
敲击键盘“1”键可以打开/关闭逻辑CPU的状态信息。
关于逻辑CPU的概念,请参考《如何查看机器的CPU信息?》。
(12)top -Hp [pid] 显示指定进程的线程信息。
(13)按下 K 键,输入 PID,输入信号,回车确认给该 PID 发送信号。
(14)按下 R 键,输入 PID,输入 nice 值,回车确认给该 PID 设置 nice 值。

参考文献:
1. http://www.cnblogs.com/peida/archive/2012/12/24/2831353.html
2. http://www.cnblogs.com/caosiyang/archive/2012/10/15/2724585.html
3. http://www.cnblogs.com/wangkangluo1/archive/2012/04/18/2454993.html
4. http://wenku.baidu.com/view/1cb3338683d049649b6658a3.html
5. http://edsionte.com/techblog/archives/4297                      

没有评论: