TOP头信息描述
- 第一行
系统运行信息概述top - 21:44:11 up 24 min, 1 user, load average: 0.01, 0.03, 0.05 21:44:11 当前时间 up 24 min 系统运行时间,格式为时:分 1 user 当前登录用户数 load average: 0.01, 0.03, 0.05 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
- 第二行
系统进程概述Tasks: 276 total, 1 running, 183 sleeping, 0 stopped, 0 zombie total 进程总数 running 正在运行的进程数 sleeping 睡眠的进程数 stopped 停止的进程数 zombie 僵尸进程数
- 第三行
描述了CPU的使用情况%Cpu(s): 0.1 us, 0.3 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st 0.3% us 用户进程占用CPU百分比 1.0% sy 系统占用CPU百分比 0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比 98.7% id CPU空闲率 0.0% wa 等待IO的CPU时间百分比 0.0%hi: 硬中断(Hardware IRQ)占用CPU的百分比 0.0%si: 软中断(Software Interrupts)占用CPU的百分比 0.0%st: (Steal time)是当hypervisor服务另一个虚拟处理器的时候,虚拟CPU等待实际CPU的时间的百分比。
- 第四行
描述了物理内存分布(单位KB)KiB Mem : 8144672 total, 5820960 free, 926020 used, 1397692 buff/cache total 物理内存总量 used 使用的物理内存总量 free 空闲内存总量 buff/cache 用作内核缓存的内存量
- 第五行
描述了交换分区的使用情况(单位KB)KiB Swap: 0 total, 0 free, 0 used. 6768828 avail Mem total 交换分区大小 free 空闲大小 used 使用大小 avail Mem 可用于进程下一次分配的物理内存数量
buff/cache代表了buff和cache总共用了多少,buff代表buffer cache占了多少空间,由于它主要用来缓存磁盘上文件的元数据,所以一般都比较小,跟cache比可以忽略不计;cache代表page cache和其它一些占用空间比较小且大小比较固定的cache的总和,基本上cache就约等于page cache,page cache的准确值可以通过查看/proc/meminf中的Cached得到。由于page cache是用来缓存磁盘上文件内容的,所以占有空间很大,Linux一般会尽可能多的将空闲物理内存用于page cache。
avail Mem表示可用于进程下一次分配的物理内存数量,这个大小一般比free大一点,因为除了free的空间外,系统还能立即释放出一些空间来。
TOP进程信息字段描述
字段 | 含义 |
---|---|
PID | 进程ID |
PPID | 父进程ID |
USER | 进程所有者 |
PR | priority优先级(值越低,优先级越高) |
NI | nice值(值越低,优先级越高) |
VIRT | 进程使用的虚拟内存总量,单位KB。VIRT=SWAP+RES |
RES | resident memory usage。常驻内存,单位KB。这个值就是该应用程序真的使用的物理内存,不包括swap out,包含其他进程的共享内存。 |
SHR | shared memory。共享内存,单位KB。除了自身进程的共享内存,也包括其他进程的共享内存;虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小。 |
S | 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
%CPU | CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程所使用的CPU时间 |
COMMAND | 进程名称 |
-
TIME+
是指的进程所使用的CPU时间,不是进程启动到现在的时间,因此,如果一个进程使用的cpu很少,那即使这个进程已经存在很长时间,TIME+也是很小的数值。eg: 257:14.655代表的时间是:这个就是257分钟,14秒,655毫秒。
-
VIRT:进程所使用的虚拟内存大小
-
RES:系统为虚拟内存分配的物理内存大小,包括file backed和anonymous内存,其中anonymous包含了进程自己分配和使用的内存,以及和别的进程通过mmap共享的内存;而file backed的内存就是指加载可执行文件和动态库所占的内存,以及通过private方式调用mmap映射文件所使用的内存(当在内存中修改了这部分数据且没有写回文件,那么这部分内存就变成了anonymous),这部分内存也可能跟别的进程共享。
-
SHR:RES的一部分,表示和别的进程共享的内存,包括通过mmap共享的内存和file backed的内存。当通过prive方式调用mmap映射一个文件时,如果没有修改文件的内容,那么那部分内容就是SHR的,一旦修改了文件内容且没有写回文件,那么这部分内存就是anonymous且非SHR的。
-
%MEM:等于RES/total*100%,这里total指总的物理内存大小。
注意:由于SHR可能会被多个进程所共享,所以系统中所有进程的RES加起来可能会超过总的物理内存数量,由于同样的原因,所有进程的%MEM总和可能超过100%。
从上面的分析可以看出,VIRT的参考意义不大,它只能反应出程序的大小,而RES也不能完全的代表一个进程真正占用的内存空间,因为它里面还包含了SHR的部分,比如三个bash进程共享了一个libc动态库,那么libc所占用的内存算谁的呢?三个进程平分吗?如果启动一个bash占用了4M的RES,其中3M是libc占用的,由于三个进程都共享那3M的libc,那么启动3个bash实际占用的内存将是3*(4-3)+3=6M,但是如果单纯的按照RES来算的话,三个进程就用了12M的空间。所以理解RES和SHR这两个数据的含义对我们在评估一台服务器能跑多少个进程时尤其重要,不要一看到apache的进程占用了20M,就认为系统能跑的apache进程数就是总的物理内存数除以20M,其实这20M里面有可能有很大一部分是SHR的。
注意:top命令输出中的RES和pmap输出中的RSS是一个东西。pamp
更改显示内容通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。
按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。
大写的 R 键可以将当前的排序倒转。
常用指令
-
在进入top后使用,注意大小写需要匹配
- P:以占据CPU百分比排序
- M:以占据内存百分比排序
- T:以累积占用CPU时间排序
- q:退出命令:按q键退出top查看页面
- s:修改刷新时间间隔。按下s键,然后按下数字,即可修改刷新时间间隔为你输入的数字,单位为秒。例如:按下s键,在按数字1键,即可实现每秒刷新一次
- k:终止指定的进程。按下k键–>再输入要杀死的进程的pid–>按enter键–>(选择信号类型,以数字标示,默认15为杀死)本步可省略按enter键(常用为-9)
-
参数说明
d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。单位秒 p 通过指定监控进程ID来仅仅监控某个进程的状态。 q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。 S 指定累计模式 s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。 i 使top不显示任何闲置或者僵死进程。 c 显示整个命令行而不只是显示命令名