指令: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工作需要的总时间