Linux指令详解top系统资源检测


指令:top 持续的监测整个系统的程序工作状态

<1>.top是一个优秀的交互式工具,能够实时显示当前系统的进程的相关信息,包括PID、内存占用率、CPU占用率等,还可以根据需要按CPU占用情况排序、内存使用情况排序。
<2>.如果在前台执行该命令,它将一直显示前台,直到用户终止该程序

命令格式:
# top [-] [d] [p] [q] [c] [C] [S] [s] [n]

参数说明:
-b: 批处理模式。通常用在脚本中,不断输出信息
-c: 显示包含路径的命令行,而不只是程序名称
-d: 指定信息刷新的时间间隔(默认是5s)
-i: 不显示闲置或者僵死进程
-n: 指定显示的次数。一般与-b搭配使用
-p: 指定进程号。可以指定多个pid
-s: 使top命令在安全模式中运行
-S: 指定累积模式,每个进程的CPU时间为该进程及关闭的子进程锁累加的时间
-u: 指定用户名

top交互命令:
c: 显示完整的命令
d: 更改刷新频率
f: 增加或减少要显示的列(选中的会变成大写并加*号)
F: 选择排序的列
h: 显示帮助画面
H: 显示线程
i: 忽略闲置和僵死进程
k: 通过给予一个PID和一个signal来终止一个进程。(默认signal为15。在安全模式中此命令被屏蔽)
l:  显示平均负载以及启动时间(即显示影藏第一行)
m: 显示内存信息
M: 根据内存资源使用大小进行排序
N: 按PID由高到低排列
o: 改变列显示的顺序
O: 选择排序的列,与F完全相同
P: 根据CPU资源使用大小进行排序
q: 退出top命令
r: 修改进程的nice值(优先级)。优先级默认为10,正值使优先级降低,反之则提高的优先级
s: 设置刷新频率(默认单位为秒,如有小数则换算成ms)。默认值是5s,输入0值则系统将不断刷新
S: 累计模式(把已完成或退出的子进程占用的CPU时间累计到父进程的MITE+ )
T: 根据进程使用CPU的累积时间排序
t: 显示进程和CPU状态信息(即显示影藏CPU行)
u: 指定用户进程
W: 将当前设置写入~/.toprc文件,下次启动自动调用toprc文件的设置
<: 向前翻页
>: 向后翻页
?: 显示帮助画面
1(数字1): 显示每个CPU的详细情况
<Space>:立即刷新


top输出解析
# top
top - 02:53:08 up 24 days, 18:47,  1 user,  load average: 0.02, 0.01, 0.00
Tasks:  84 total,   1 running,  83 sleeping,   0 stopped,   0 zombie
Cpu(s): 0.0%us,  0.2%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3922748k total,   813552k used,  3109196k free,   158292k buffers
Swap:  8191992k total,        0k used,  8191992k free,   505676k cached


  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                         
 1086 root      20   0 15004 1292 1004 R  0.3  0.1   0:00.11 top                                                   
    1 root      20   0 19232 1476 1188 S  0.0  0.0   0:00.67 init
第一行:
top - 02:53:08 up 24 days, 18:47, 1 user, load average: 0.02, 0.01, 0.00
top: 表示为top的指令
02:53:08: 系统当前时间
up 24 days, 18:47: 系统开机到现在经过了多少时间
1 user: 当前连接用户数
load average: 0.02, 0.01, 0.00:系统1分钟、5分钟、15分钟的平均CPU负载信息

系统平均CPU负载:
<1>.load average数据每隔5秒检查一次活跃的进程数,然后按特定算法计算出的数值。
<2>.在多处理器系统中,CPU负载均值是基于内核的数量决定的。以 100% 负载计算,1.00 表示单个处理器,而 2.00 则说明有两个双处理器,同理 4.00 就说明主机具有四个处理器。反推对于双核处理器,值为2.00则表示100%负载。
<3>.一般,对于单个处理器这个值应该低于1,除非系统很忙碌。如果这个值高于5则表明系统超负荷运转。
<4>.有经验的系统管理员都会将这条线划在 0.70:

第二行:任务总览
Tasks: 84 total, 1 running, 83 sleeping, 0 stopped, 0 zombie
Tasks: 任务
84 total: 当前进程总数
1 running: 正在运行的进程数
83 sleeping: 睡眠进程数量
0 stopped: 停止的进程数
0 zombie: 僵死进程数

第三行:cpu状态 表示这一行显示CPU总体信息
Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu(s): 显示CPU的信息
us: 用户空间占用CPU百分比
sy: 内核空间占用CPU的百分比
ni: 用户进程空间中改变过优先级的进程占用CPU百分比
id: 空闲CPU百分比(反映一个系统cpu的闲忙程度)
wa: 等待输入输出(I/O)的CPU时间百分比
hi: CPU处理硬件中断占用的时间
si: CPU处理软件中断占用的时间
st: 显示虚拟机被hypervisor偷去的CPU时间(有虚拟cpu的情况)

注:当有多个CPU时,可能会超过两行,这个时候就需要使用数字键1来更改,如下
Cpu0  :  0.7%us,  0.0%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  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: 3922748k total, 813552k used, 3109196k free, 158292k buffers
Men: 显示内存的信息
total: 表示物理内存总量(total = used + free)
used: 表示已经使用的物理内存总量
free: 表示空闲的物理内存(buffers和cached所占用的也被当作已使用)
buffers: 表示用作内核缓存的物理内存

第五行:虚拟内存使用(交换空间)
Swap: 8191992k total, 0k used, 8191992k free, 505676k cached
Swap: 交换空间
total: 表示交换空间总量
used: 表示使用的交换空间总量
free: 表示空闲的交换空间总量
cached: 表示缓冲交换空间总量

buffers和cached都是linux操作系统底层的机制,目的是为了加速对磁盘的访问。
其中buffers指的是块设备的读写缓冲区,cached指的是文件系统本身的页面缓存。

近似的计算内存总量公式:第四行的free + 第四行的buffers + 第五行的cached

第六行:空行
在top程序中输入指令的地方

第七行:每个进程使用的资源情况
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                         
 1086 root      20   0 15004 1292 1004 R  0.3  0.1   0:00.11 top                                                                                                         
    1 root      20   0 19232 1476 1188 S  0.0  0.0   0:00.67 init
PID:  进程的ID(进程的唯一标识符)
USER: 该进程所属用户
PR:   进程调度的优先级(值越小越优先被执行,RT表示正在运行中)
NI:   进程的nice值。(范围-20到19,值越小越优先被执行)
VIRT: 进程使用的虚拟内存总量(单位kb,VIRT=SWAP+RES)
RES:  进程占用的物理内存。(单位kb。RES=CODE+DATA。%MEM 所显示的是由此列的值)
SHR:  进程使用的共享内存。(单位kb) 
S:    进程的状态。主要有以下几种:
    D.不可中断的休眠
    S.休眠
    R.正在运行
    T.被跟踪或已停止
    Z.僵死状态(僵尸进程)
%CPU: 进程占用的CPU百分比
%MEM: 进程占用的物理内存的百分比(以RES列的值为标准)
TIME+:进程启动后占用的总的CPU时间。(单位1/100秒) 
COMMAND: 进程启动命令名称


还有其他默认中不显示的输出,所有的显示如下
a   PID     进程id
b   PPID    父进程id
c   RUSER   Real user name
d   UID     进程所有者的用户id
e   USER    进程所有者的用户名
f   GROUP   进程所有者的组名
g   TTY     启动进程的终端名。
h   PR      优先级
i   NI      nice值。负值表示高优先级,正值表示低优先级
j   P       最后使用的CPU,仅在多CPU环境下有意义
k   %CPU    上次更新到现在的CPU时间占用百分比
l   TIME    进程使用的CPU时间总计,单位秒
m   TIME+   进程使用的CPU时间总计,单位1/100秒
n   %MEM    进程使用的物理内存百分比
o   VIRT    进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p   SWAP    进程使用的虚拟内存中,被换出的大小,单位kb。 SWAP = VIRT - RES
q   RES     进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA(应用程序真的使用的内存)
r   CODE    可执行代码占用的物理内存大小,单位kb
s   DATA    可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t   SHR     共享内存大小,单位kb
u   nFLT    进程启动以来页面错误的次数(这个值过高意味着进程从磁盘读取大量资源)
v   nDRT    最后一次写入到现在被修改过的页面数。(通常小于10或者为0)
w   S       进程状态
        D.不可中断的休眠
        S.休眠
        R.正在运行
        T.被跟踪或已停止
        Z.僵死状态(僵尸进程)
x   COMMAND 命令名/命令行
y   WCHAN   若该进程在睡眠,则显示睡眠中的系统函数名
z   Flags   任务标志,参考 sched.h

注:
<1>.在默认中,是按“%CPU”排序的
<2>.shift + >或shift + <可以向右或左改变排序列
<3>.何时刷新时间需要快于1s:时间段内需要更多的样本

-------------------------------
参数实例
1、默认输出:
# top

2、指定输出次数(-n)
更新5次后退出
# top -n 5

3、批处理模式(-b)
使用批处理模式可以在文件中保存输出
# top -b

4、2与3结合:
将top的信息处理5次,然后将结果输出到dodo.txt文件
# top -b -n 5 > /doiido/dodo.txt

5、指定进程(-p)
PID为0表示为top命令自身的PID
5.1:监控PID为3345的进程
# top -p 3345

5.2:监控PID为3345和PID为7634的进程
# top -p 3345 -p 7634

6、指定刷新时间(-d)(以秒计)
设置信息刷新时间为5s(一般设置为1到3秒的间隔)
# top -d 5

7、显示完整命令(-c)
# top -c

8、以累积模式显示信息(-S)
# top -S

9、指定用户名(-u,-U)
可以指定显示的用户或者UID
9.1、只显示用户为doiido的进程
# top -U doiido

9.2、只显示UID为600的进程
# top -u 600

注:-p、-u和-U选项同时只可以使用一个

10、只显示空闲进程(-i)
# top -i

-------------------------------
交互命令实例
1、帮助: h或者?

2、立即刷新: <ENTER> 或者 <SPACE>

3、设置更新刷新间隔: 'd' 或 's'
按下'd'或's'时会提示输入一个值(以秒为单位),然后将会以这个值作为刷新间隔

4、字段管理: f
按下f后可以选择想要显示的字段。(*标记表示已选择的)

5、反向排序: R
按下R切换反向和常规排序

6、显示命令: c
按下c切换完整路径和程序名

7、空闲任务: i
切换显示空闲任务

8、指定用户: u
按下u会提示输入用户名,然后就会显示特定用户的进程(空白将会显示全部用户)

9、粗体显示: B
按下B切换重要信息粗体显示

10、设置最大显示任务数: 'n' 或 '#'
按下n或者#后会提示输入数字,该数字即为最大显示的任务数量

11、终止的进程: k
按下k之后会提示输入一个PID,然后输入PID之后会提示输入给该进程什么信号
注:一般终止进程使用15信号,如不能正常结束则使用信号9

12、切换高亮信息: 'x' 或者 'y'
x:将排序字段高亮显示(纵列)
y:将运行进程高亮显示(横行)

13、重新设置优先级: r
重新设置一个任务的优先级(用法和k一样)

14、切换负载、任务、内存信息的显示: 'l' 't' 'm'
默认如下:
top - 09:32:20 up 26 min,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  72 total,   1 running,  71 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.5%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1914492k total,   148084k used,  1766408k free,     7460k buffers
Swap:  2047992k total,        0k used,  2047992k free,    37928k cached

l:切换显示第二行
Tasks:  72 total,   1 running,  71 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:   1914492k total,   148084k used,  1766408k free,     7452k buffers
Swap:  2047992k total,        0k used,  2047992k free,    37928k cached

t:切换显示第三行
top - 09:32:46 up 26 min,  1 user,  load average: 0.00, 0.00, 0.00
Mem:   1914492k total,   148084k used,  1766408k free,     7460k buffers
Swap:  2047992k total,        0k used,  2047992k free,    37928k cached

m:切换显示Mem和Swap
top - 09:33:32 up 27 min,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  72 total,   1 running,  71 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.5%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

15、切换全屏和交替模式间: A
交替模式按下A会显示4个窗口,分别为如下四个字段:
Def:默认字段组(默认只显示这个组)
Job:任务字段组
Mem:内存字段组
Usr:用户字段组
在这个模式下,按a或w可以切换,切换之后按-可以隐藏
:Def - 09:23:09 up 17 min,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  72 total,   1 running,  71 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:   1914492k total,   147960k used,  1766532k free,     7380k buffers
Swap:  2047992k total,        0k used,  2047992k free,    37928k cached

1  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                              
     1 root      20   0 19232 1516 1228 S  0.0  0.1   0:01.08 init                                                 
     2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                                                      
2  PID  PPID    TIME+  %CPU %MEM  PR  NI S  VIRT SWAP  RES  UID COMMAND                                            
  1086  1073   0:01.70  0.0  0.1  20   0 R 15004    0 1296    0 top                                                
  1073  1069   0:00.03  0.0  0.1  20   0 S  105m    0 1844    0 bash                                                                               
3  PID %MEM  VIRT SWAP  RES CODE DATA  SHR nFLT nDRT S  PR  NI %CPU COMMAND                                        
  1069  0.2 98.0m    0 4028  520  800 3048    5    0 S  20   0  0.0 sshd                                           
  1034  0.2 81520    0 3424  288  704 2544    2    0 S  20   0  0.0 qmgr                                           
4  PID  PPID  UID USER     RUSER    TTY         TIME+  %CPU %MEM S COMMAND                                         
  1069   949    0 root     root     ?          0:00.94  0.0  0.2 S sshd                                            
  1025     1    0 root     root     ?          0:00.01  0.0  0.2 S master  

------------------------特定应用------------------
1:通过shell脚本监控
在shell脚本中添加如下行
top -b -n 2 | grep -E "java| apache2" >> /doiido/logs

2:监视特定进程
将需要监视的进程命令行特征保存到KEYS中即可
#!/bin/sh
KEYS='agent|omc4j|terminal|module'

pslist()
{
    ps -ef | egrep $KEYS | grep -v grep
}


readpid()
{
    while read user pid dummy;
    do
        echo -n " -p $pid"
    done
}


top `pslist | readpid`

3、与at或cron结合,在特定时间对资源使用状态进行快照
# vi test.at
TERM=linux top -b -n 1 > /doiido/dodo.txt
# at -f ./test.at now+1minutes

TERM:Top运行时需要此变量,但“at”在定时调用时并不会保留

4、查看运行时间
# time top -b -n 1
real    0m0.665s
user    0m0.010s
sys     0m0.108s

real:Top工作需要的总时间


相关内容