top命令是Linux下经常使用的性能分析工具,可以实时显示系统中各个进程的资源占用情况,相似于Windows的任务管理器。下面详细介绍它的使用方法。html
top是一个动态显示过程,便可以经过用户按键来不断刷新当前状态.若是在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令能够按CPU使用.内存使用和执行时间对任务进行排序;并且该命令的不少特性均可以经过交互式命令或者在我的定制文件中进行设定java
1.命令格式:mysql
top [参数]linux
2.命令功能:算法
显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等sql
3.命令参数:express
-b 批处理windows
-c 显示完整的触发命令(即commont字段内容的切换,貌似显示为请求类型与完整的该进程的触发命令行内容之间切换) 显示整个命令行而不仅是显示命令名,这里指的是command字段的列信息,将显示完整的开启该进程的命令行的信息。 开启前:mysqld,开启后:/usr/libexec/mysqld --basedir=/usr --datadir=/newdata/mysqldata --user=mysql --logcentos
-I 忽略失效过程缓存
-s 保密模式。
-S 累积模式。
-i<时间> 设置间隔时间。
-u<用户名> 指定用户名。
-p<进程号> 指定进程。
-n<次数> 循环显示的次数。
4.使用实例:
实例1:显示进程信息
[root@TG1704 log]# top
top - 14:06:23 up 70 days, 16:44, 2 users, load average: 1.25, 1.32, 1.35
Tasks: 206 total, 1 running, 205 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.9%us, 3.4%sy, 0.0%ni, 90.4%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 32949016k total, 14411180k used, 18537836k free, 169884k buffers
Swap: 32764556k total, 0k used, 32764556k free, 3612636k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28894 root 22 0 1501m 405m 10m S 52.2 1.3 2534:16 java
18249 root 18 0 3201m 1.9g 11m S 35.9 6.0 569:39.41 java
2808 root 25 0 3333m 1.0g 11m S 24.3 3.1 526:51.85 java
25668 root 23 0 3180m 704m 11m S 14.0 2.2 360:44.53 java
574 root 25 0 3168m 611m 10m S 12.6 1.9 556:59.63 java
1599 root 20 0 3237m 1.9g 11m S 12.3 6.2 262:01.14 java
1008 root 21 0 3147m 842m 10m S 0.3 2.6 4:31.08 java
13823 root 23 0 3031m 2.1g 10m S 0.3 6.8 176:57.34 java
28218 root 15 0 12760 1168 808 R 0.3 0.0 0:01.43 top
29062 root 20 0 1241m 227m 10m S 0.3 0.7 2:07.32 java
1 root 15 0 10368 684 572 S 0.0 0.0 1:30.85 init
2 root RT -5 0 0 0 S 0.0 0.0 0:01.01 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
5 root RT -5 0 0 0 S 0.0 0.0 0:00.80 migration/1
6 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1
7 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/1
8 root RT -5 0 0 0 S 0.0 0.0 0:20.59 migration/2
9 root 34 19 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/2
10 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/2
11 root RT -5 0 0 0 S 0.0 0.0 0:23.66 migration/3
12 root 34 19 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/3
13 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/3
14 root RT -5 0 0 0 S 0.0 0.0 0:20.29 migration/4
15 root 34 19 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/4
16 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/4
17 root RT -5 0 0 0 S 0.0 0.0 0:23.07 migration/5
18 root 34 19 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/5
19 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/5
20 root RT -5 0 0 0 S 0.0 0.0 0:17.16 migration/6
21 root 34 19 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/6
22 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/6
23 root RT -5 0 0 0 S 0.0 0.0 0:58.28 migration/7
统计信息区:前五行是当前系统状况总体的统计信息区。下面咱们看每一行信息的具体意义。
第一行,任务队列信息,该行同linux命令行uptime 命令的执行结果,详细参见本手册的uptime命令,具体参数说明状况以下:
14:06:23 — 当前系统时间
up 70 days, 16:44 — 系统已经运行了70天16小时44分钟(在这期间系统没有重启过的吆!)
2 users — 当前有2个用户登陆系统
load average: 1.15, 1.42, 1.44 — load average后面的三个数分别在刚刚过去的1分钟、5分钟、15分钟的负载状况,详细参见uptime命令。
load average数据是每隔5秒钟检查一次活跃的进程数,而后按特定算法计算出的数值。若是这个数除以逻辑CPU的数量,结果高于5的时候就代表系统在超负荷运转了。
第二行,Tasks — 任务(进程),具体信息说明以下:
206 total, 系统如今共有206个进程
1 running, 其中处于运行中的有1个
205 sleeping, 205个在休眠(sleep)
0 stopped, stoped状态的有0个
0 zombie zombie状态(僵尸)的有0个
第三行,cpu状态信息,具体属性说明以下(关于cpu的使用率的计算,指的是一段时间内统计的处于在用状态的cpu时间片占该统计时间段的比例。好比linux的top命令貌似默认3秒统计一次。详细参考子节点cpu使用率):
5.9%us — 内存的用户空间部分程序占用CPU的百分比
3.4% sy — 内存的内核空间部分程序占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
90.4% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比等待输入输出的CPU时间百分比
0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比,CPU服务于硬件中断所耗费的时间总额
0.2% si — 软中断(Software Interrupts)占用CPU的百分比,CPU服务软中断所耗费的时间总额
0.0%st 虚拟机占用百分比
备注:在这里CPU的使用比率和windows概念不一样,须要理解linux系统内存区划的用户空间和内核空间的相关知识,参见本节点的子节点介绍!
第四行,内存状态,具体信息以下:
32949016k total — 物理内存总量(32GB)
14411180k used — 使用中的内存总量(14GB)【使用中的内存总量(used)指的是如今系统内核控制的内存数,这里能够理解为特指分配给应用进程的内存+物理内存的buffers+物理内存的caches这3个的和,应用进程有最高优先级,当物理内存不足时,系统会将buffers缓存的数据写入到磁盘,将caches缓存的数据写入到交换区的chaches,从而为程序运行提供更多内存使用。也就是说,判断内存是否够用,主要的指标是判断访问高峰期,是否能够给应用程序运行提供足够的内存-亚强】
18537836k free — 空闲内存总量(18GB)【空闲内存总量(free)是内核还未归入其管控范围的数量。归入内核管理的内存不见得都在使用中,还包括过去使用过的如今能够被重复利用的内存,内核并不把这些可被从新使用的内存交还到free中去,所以在linux上free内存会愈来愈少,但不用为此担忧。】
169884k buffers — 缓存的内存量 (169M),用于暂时存放要写入到磁盘的数据,等待系统资源充足时候一次性写入磁盘速度更快。从而没必要每次程序写入动做无需等待真正写入磁盘成功,将要写入的数据先存放到内存buffers缓冲区,程序直接继续执行下面的动做。
备注:关于真正的机器的可用内存,若是出于习惯去计算真正的可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached(这个参数自己表明swap交换区的一段存储空间,只是该存储空间的大小也等于物理内存中系统开辟的cached存储区间,也就是交换区与物理内存都有cached缓冲区-亚强),按这个公式此台服务器的可用内存:18537836k +169884k +3612636k = 22GB左右。
对于内存监控,在top里咱们要时刻监控第五行swap交换分区的used,若是这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
第五行,swap交换分区信息(也叫作虚拟物理内存,即在硬盘上开辟的一段空间,用于相似于内存功能,可是存取速度远低于内存,能够用于内存不足时使用),具体信息说明以下:
32764556k total — 交换区总量(32GB)
0k used — 使用的交换区总量(0K)
32764556k free — 空闲交换区总量(32GB)
3612636k cached — 缓冲的交换区总量(3.6GB),物理内存中的内容被换出到swap交换区,然后又被换入到物理内存,但使用过的swap交换区还没有被覆盖(注意这些还没有被覆盖的存储空间不计入第五行的used参数值,貌似被计入了第五行的free中,由于这段内存空间若是系统须要,就会被覆盖掉,所以被计入到了free变量),该数值即为这些内容已存在于物理内存中的交换区的大小,相应的内存,再次被换出时可没必要再对swap交换区写入。也就是该参数值得内存中的一段存储空间,这段空间中存储着在交换区的一段空间数据,可是注意该交换区的数据实际已经被注销掉,成为空闲空间free,你知道即便成为空闲空间,那么若是没有新数据写入覆盖掉该段存储空间,那么这段空间的数据是不会丢失的,所以当与之对应的内存中的当时调入内存中的一样的数据因为系统调用再次被调出到swap交换区(这段数据已经存在于交换区),那么系统不会从新将这段数据写入交换区,而是将原来已经存在于交换区的数据标志为可用便可。
综上:【亚强】缓冲交换区cached是swap交换区中的一段空间,该空间存储着从物理内存调入到swap交换区且又被物理内存调回到物理内存的数据且还没有被从物理内存新调入到swap交换区的数据覆盖掉的在swap交换区所占存储空间。当系统须要再次调出物理内存中的这些已经存在于cached中的数据到swap交换区,那么系统不会从新写入数据到swap交换区,而是将原来的这些存在于cached中的注销标记改成数据可用便可(从而加快了数据交互速度)。这些用于cached缓冲交换区的存储空间,当从物理内存中调入交换区swap的数据量很大时,那么新调入的数据就可能要覆盖掉这些cached所占空间的有注销标记的数据。所以cached缓冲交换区单独拿出来,不被计入到used参数下,而是计入到free参数下,由于cached仍然是能够被使用的。
亚强(强商科技)注释:关于linux内存管理机制(物理内存(分为程序使用的内存和buffers,cached)和虚拟内存(swap交换分区)),详细参见本阶段下面的【linux内存管理机制】节点。
第六行,空行
第七行如下:各进程(任务)的状态监控,项目列信息说明以下:
默认状况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、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时间占用百分比,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.能够用I来切换Irix/Solaris模式,在多核心的cpu系统中,%cpu列将根据上一次更新时刻到本次更新时刻每一个cpu的总时间
分为100份,即若是有n个cpu核心,那么总时间份数为n*100份。那么每一个进程的份数累加最大能够达到n*100.若是运行在Irix模式下,那么每一个进程
的%cpu字段的值为上一次更新时刻到本次更新时刻全部cpu核心处理器分配给该进程的份数总和与n*100的比例,即此种状况是相对于所有cpu的时间份数总
额的占比。若是运行在Solaris模式下,那么每一个进程的的%cpu字段的值为上一次更新时刻到本次更新时刻全部cpu核心处理器分配给该进程的份数总和与100
的比例,即此种状况是相对于每一个cpu时间份数总额的占比(这里的cpu应该指的是逻辑cup格式,1个物理cpu能够有多个核心,着多个核心
也能够称为多个逻辑cpu)
l TIME 进程使用的CPU时间总计,单位秒,top命令的TIME/TIME+是指的进程所使用的CPU时间,不是进程启动到如今的时间,所以,若是一个进程使
用的cpu不多,那即便这个进程已经存在N长时间,TIME/TIME+也是很小的数值。此外,若是你的系统有多个CPU,或者是多核CPU的话,那么,进程占用多
个cpu的时间是累加的。 Total CPU time the task has used since it started. When ‘Cumulative mode’ is On, each process is listed with
the cpu time that it and its dead children has used. You toggle ‘Cumulative mode’ with ‘S’, which is a command-line option and an
interactive command. See the ‘S’ interactive command for additional information regarding this mode.
m TIME+ 进程使用的CPU时间总计,单位1/100秒,top命令的TIME/TIME+是指的进程所使用的CPU时间,不是进程启动到如今的时间,所以,若是
一个进程使用的cpu不多,那即便这个进程已经存在N长时间,TIME/TIME+也是很小的数值。此外,若是你的系统有多个CPU,或者是多核CPU的话,那么,
进程占用多个cpu的时间是累加的。CPU Time, hundredths The same as ‘TIME’, but reflecting more granularity through hundredths of
a second
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA,这里指的是内存加数据。
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码之外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb(本字段介绍参加本手册节点的子节点)
u nFLT 页面错误次数
v nDRT 最后一次写入到如今,被修改过的页面数。
w S 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/中止,Z=僵尸进程,详细参见子节点【Linux进程状态解析 之 R、S、D、T、Z、X (主要有三个状态)】)
x COMMAND 触发当前进程的命令名/命令行(能够用c来切换)
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h
其余使用技巧:
多U多核CPU监控
在top基本视图中,按键盘数字“1”,可监控每一个逻辑CPU的情况,下面的cpu0,cpu1,cpu2,cpu3.....cpu15共计16个逻辑cpu:再按一下数字1,则返回主页面,显示cpu(s)的cpu性能。
观察上图,服务器有16个逻辑CPU,其实是4个物理CPU。再按数字键1,就会返回到top基本视图界面。
高亮显示当前运行进程
敲击键盘“b”(打开/关闭加亮效果),top的视图变化以下:()
咱们发现进程id为2570的“top”进程被加亮了,top进程就是视图第二行显示的惟一的运行态(runing)的那个进程,能够经过敲击“y”键关闭或打开运行态进程的加亮效果。
进程字段排序字段高亮显示
top -x
注意:使用-x开启排序高亮功能后,还须要使用-b命令给出是否高亮显示该排序的列。
默认进入top时,各进程是按照CPU的占用量来排序的,在下图中进程ID为28894的java进程排在第一(cpu占用142%),进程ID为574的java进程排在第二(cpu占用16%)。
敲击键盘“x”(打开/关闭排序列的加亮效果,如会将当前排序行,高亮显示),top的视图变化以下:
能够看到,top默认的排序列是“%CPU”。
排序字段: 经过”shift + >”或”shift + <”能够向右或左改变排序列(注意:该组合键是在开启了top以后,运行时按下的)
下图是按一次”shift + >”的效果图,视图如今已经按照%MEM来排序。
实例2:显示完整命令
命令:
top -c //亚强:该行貌似与直接写top效果同样
输出:
说明:
实例3:以批处理模式显示程序信息(高亮显示某些字段,与-x结合,能够控制显示当前排序字段高亮)
命令:
top -b
输出:
说明:
实例4:以累积模式显示程序信息
命令:
top -S
输出:
说明:
实例5:设置信息更新次数
命令:
top -n 2
输出:
说明:
表示更新两次后终止更新显示
实例6:设置信息更新时间,即间隔多少秒后更新,该参数支持浮点型数据,如top -d 0.2,每隔0.2秒刷新一次数据。
命令:
top -d 3
输出:
说明:
表示更新周期为3秒
实例7:显示指定的进程信息
命令:
top -p 574 //亚强:后面的数字是PID的值,即进程的id号
输出:
说明:
实例8:top交互命令(关于下面须要输入参数的命令如何返回到交互状态初始化状态,能够不输入任何参数,而后按下enter便可,若是输入参数,而后按下enter,那么执行当前交互命令,对于其余交互动做,能够用enter确认执行,用esc取消执行)
在top 命令执行过程当中可使用的一些交互命令。这些命令都是单字母的,若是在命令行中使用了s 选项, 其中一些命令可能会被屏蔽。
h 显示帮助画面,给出一些简短的命令总结说明,按任意键后返回到top列表界面。
k 终止一个进程。输入pid参数+enter便可以杀死该pid对应的进程。咱们能够直接按下enter返回到top界面。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序,//退出top命令
r 从新安排一个进程的优先级别
S 切换到累计模式
s 改变两次刷新之间的延迟时间(单位为s),若是有小数,就换算成ms(好比0.1的效果是100ms)。输入0值则系统将不断刷新,默认值是3s(centos中)
f从当前显示中添加或者删除项目更改显示内容经过 f 键能够选择显示的内容。按 f 键以后会显示列的列表,按 a-z 便可显示或隐藏对应的列,最后按回车键肯定。
F或O:选择当前排序字段,按下a-z中的某个按键肯定排序字段,而后按下enter确认,按下esc取消。
o或者O 改变显示项目的顺序//进入该模式后,系统用a,b,c,d,e...n标记表明每一列的表头,咱们经过按下【标记字母】,那么该字段后移动,按下【shift+标记字母】,则前移动。按 o 键能够改变列的显示顺序。按小写的 a-z 能够将相应的列向右移动,而大写的 A-Z 能够将相应的列向左移动。最后按回车键肯定,按下esc取消。
l 字母l,切换显示平均负载和启动时间信息//top的第一行是否显示
1 数字1,在top基本视图中,按键盘数字“1”,可监控每一个逻辑CPU的情况,下面的cpu0,cpu1,cpu2,cpu3.....cpu15共计16个逻辑cpu:再按一下数字1,则返回主页面,显示cpu(s)的cpu性能。
m 切换显示内存信息//top的第4,5行是否显示
t 切换显示进程和CPU状态信息//top的第2,3行是否显示
c 切换显示命令名称和完整命令行(亚强:(即commont字段内容的切换,貌似显示为请求类型与完整的该进程的触发命令行内容之间切换))显示整个命令行而不仅是显示命令名 ,这里指的是command字段的列信息,将显示完整的开启该进程的命令行的信息/仅仅简略显示来切换显示。
M 根据驻留内存大小进行排序
P 根据CPU使用百分比大小进行排序
T 根据时间/累计时间进行排序
R 改变排序方式(升序/降序)
”shift + >”或”shift + <”:能够向右或左改变排序列(注意:该组合键是在开启了top以后,运行时按下的)
b 当前处于运行状态的行高亮/取消高亮(控制当前排序的行是否高亮,须要首先使用x开启排序高亮)
x 当前处于排序字段的列高亮/取消高亮(有时候直接按下x无效果,此时首先按一下b执行高亮显示)
I:切换Irix/Solaris模式,在多核心的cpu系统中,%cpu列将根据上一次更新时刻到本次更新时刻每一个cpu的总时间分为100份,即若是有
n个cpu核心,那么总时间份数为n*100份。那么每一个进程的份数累加最大能够达到n*100.若是运行在Irix模式下,那么每一个进程的的%cpu字段的值为上一次更新时刻到本次更新时刻全部cpu核心处理器分配给该进程的份数总和与n*100的比例,即此种状况是相对于所有cpu的时间份数总额的占比。若是运行在Solaris模式下,那么每一个进程的的%cpu字段的值为上一次更新时刻到本次更新时刻全部cpu核心处理器分配给该进程的份数总和与100的比例,即此种状况是相对于每一个cpu时间份数总额的占比。
W 将当前设置写入~/.toprc文件中附经常使用操做:
top //每隔5秒显式全部进程的资源占用状况top -d 2 //每隔2秒显式全部进程的资源占用状况top -p 12345 -p 6789//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用状况top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用状况,并显式该进程启动的命令行参数