Top命令是Linux下常用的性能分析工具
,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。
top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如果在前台执行该命令它将独占前台,直到用户终止该程序为止。比较准确的说 top 命令提供了实时的对系统处理器的状态监视,它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用/内存使用/执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。
命令格式
top [参数]
命令功能
显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等!
命令参数
-b 批处理
-c 显示完整的运行命令
-I 忽略失效过程
-i<时间> 设置间隔时间(使top不显示任何闲置或者僵死进程)
-u<用户名> 指定用户名
-n<次数> 循环显示的次数
-d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之
-p 通过指定监控进程ID来仅仅监控某个进程的状态
-q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行
-S 指定累计模式
-s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险
使用实例
显示进程信息
[root@master ~]# top
top.original - 19:56:01 up 2 days, 7:38, 3 users, load average: 0.32, 0.34, 0.48
Tasks: 240 total, 1 running, 223 sleeping, 0 stopped, 16 zombie
%Cpu0 : 1.5 us, 0.0 sy, 0.0 ni, 98.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.7 us, 1.0 sy, 0.0 ni, 98.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 1.0 us, 1.0 sy, 0.0 ni, 98.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 2.3 us, 0.8 sy, 0.0 ni, 97.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu4 : 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu5 : 0.7 us, 1.0 sy, 0.0 ni, 98.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu6 : 1.1 us, 0.4 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu7 : 0.7 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 49539076 total, 551344 free, 47102376 used, 1885356 buff/cache
KiB Swap: 4063228 total, 2436196 free, 1627032 used. 1943932 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
78200 root 20 0 13.7g 3.2g 8904 S 22.3 6.7 151:30.53 java
37716 root 20 0 13.6g 1.8g 7104 S 8.0 3.9 257:59.85 java
31864 root 20 0 13.5g 2.4g 5796 S 5.6 5.1 122:39.97 java
统计信息区:
前五行是当前系统情况整体的统计信息区。下面我们看每一行信息的具体意义。
第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:
参数 | 说明 |
---|---|
19:56:01 | 当前系统时间 |
up 2 days, 7:38 | 系统已经运行了2天(在这期间系统没有重启过的吆!) |
3 users | 当前有3个用户登录系统 |
load average | load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。 |
第二行,Tasks — 任务(进程),具体信息说明如下:
系统现在共有240个进程,其中处于运行中的有1个,223个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有16个。
第三行,cpu状态信息,具体属性说明如下:
参数 | 说明 |
---|---|
1.5%us | 用户空间占用CPU的百分比 |
0.0 sy | 内核空间占用CPU的百分比 |
0.0 ni | 改变过优先级的进程占用CPU的百分比 |
98.5 id | 空闲CPU百分比 |
0.0 wa | IO等待占用CPU的百分比 |
0.0 hi | 硬中断(Hardware IRQ)占用CPU的百分比 |
0.0 si | 软中断(Software Interrupts)占用CPU的百分比 |
备注:在这里CPU的使用比率和windows概念不同,需要理解linux系统用户空间和内核空间的相关知识!
第四行,内存状态,具体信息如下:
选项 | 参数 |
---|---|
32949016k total | 物理内存总量 |
551344k free | 空闲内存总量 |
47102376k used | 使用中的内存总量 |
1885356k buff/cache | 缓存的内存量 |
第五行,swap交换分区信息,具体信息说明如下:
选项 | 参数 |
---|---|
4063228 total | 交换区总量 |
1627032 used | 使用的交换区总量 |
2436196 free | 空闲交换区总量 |
1943932 avail Mem | 缓冲的交换区总量 |
备注:
第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数
,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存。
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
第六行,空行。
第七行以下:各进程(任务)的状态监控,项目列信息说明如下:
选项 | 参数 |
---|---|
PID | 进程id |
USER | 进程所有者 |
PR | 进程优先级 |
NI | nice值。负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
SHR | 共享内存大小,单位kb |
S | 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
%CPU | 上次更新到现在的CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
COMMAND | 进程名称(命令名/命令行) |
top交互命令
在top 命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了s选项, 其中一些命令可能会被屏蔽。
h 显示帮助画面,给出一些简短的命令总结说明
k 终止一个进程。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序
r 重新安排一个进程的优先级别
S 切换到累计模式
s 改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s
f或者F 从当前显示中添加或者删除项目
o或者O 改变显示项目的顺序
l 切换显示平均负载和启动时间信息
m 切换显示内存信息
t 切换显示进程和CPU状态信息
c 切换显示命令名称和完整命令行
M 根据驻留内存大小进行排序
P 根据CPU使用百分比大小进行排序
T 根据时间/累计时间进行排序
W 将当前设置写入~/.toprc文件中
# 在Top命令下按h显示以下帮助信息
交互式命令帮助- procps-ng版本3.3.10
窗口1:Def:累计模式开启。 系统:延迟3.0秒; 安全模式。
Z,B,E,e Global: 'Z' 渲染; 'B' 粗体; 'E'/'e' 总结/任务存储规模
l,t,m 切换 Summary: 'l' load avg; 't' task/cpu stats; 'm' memory info
0,1,2,3,I 切换: '0' zeros; '1/2/3' cpu视图或numa节点视图; 'I' Irix mode
f,F,X 字段: 'f'/'F' add/remove/order/sort; 'X' 提高固定宽度
L,&,<,> . 查找: 'L'/'&' find/again; Move sort column: '<'/'>' left/right
R,H,V,J . Toggle: 'R' Sort; 'H' 线程; 'V' Forest view; 'J' 数字对其
c,i,S,j . Toggle: 'c' Cmd name/line; 'i' Idle; 'S' Time; 'j' 字符串对其
x,y . Toggle 亮点: 'x' sort field; 'y' running tasks
z,b . Toggle: 'z' color/mono; 'b' 粗体/反向 (only if 'x' or 'y')
u,U,o,O . Filter by: 'u'/'U' effective/any user; 'o'/'O' other criteria
n,#,^O . Set: 'n'/'#' max tasks displayed; Show: Ctrl+'O' other filter(s)
C,... . reniceToggle滚动坐标为:上,下,左,右,home,end
k,r 设置更新间隔操作任务: 'k' kill; 'r' renice(调整优先级)
d or s 更新时间间隔设置
W,Y 写入配置文件 'W'; 检查其它输出 'Y'
q Quit
( 任务内存缩放命令显示为'.' 需要一个可见的任务显示窗口 )
Press 'h' or '?' for help with
Years from now you’ll look back and thank yourself.