Linux18.2_top命令详解
关于ps命令的用法,见Linux_18下查看进程的启动和运行时间。虽然ps在收集系统上的进程信息很有用,但也有不足之处:它只能显示某个特定时间点的饿信息,如果想观察频繁换进换出的内存的运行趋势,ps就有点力不从心了。
top
命令和ps
相似,可以实时显示进程信息。
top - 18:56:37 up 23:03, 1 user, load average: 296.20, 296.00, 302.87
Tasks: 764 total, 1 running, 590 sleeping, 0 stopped, 0 zombie
%Cpu(s): 14.1 us, 1.5 sy, 0.0 ni, 0.0 id, 83.2 wa, 0.0 hi, 1.1 si, 0.0 st
KiB Mem : 65885076 total, 402748 free, 65326388 used, 155940 buff/cache
KiB Swap: 2097148 total, 340 free, 2096808 used. 13324 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
27687 pc 20 0 3240472 215596 0 S 3.3 0.3 7:14.96 java
30658 pc 20 0 3173908 222532 0 S 3.3 0.3 8:13.48 java
31401 pc 20 0 3240472 213156 0 S 3.3 0.3 7:34.65 java
32428 pc 20 0 3307036 214048 0 S 3.3 0.3 9:56.77 java
24691 pc 20 0 3373600 211868 0 S 2.8 0.3 10:11.30 java
25199 pc 20 0 3373600 211508 0 S 2.8 0.3 5:15.19 java
27693 pc 20 0 3240472 215908 0 S 2.8 0.3 7:06.08 java
28596 pc 20 0 3173908 222992 0 S 2.8 0.3 8:51.75 java
28842 pc 20 0 3307036 221788 0 S 2.8 0.3 7:00.92 java
29396 pc 20 0 3307036 220716 0 S 2.8 0.3 10:03.62 java
29761 pc 20 0 3307036 215060 0 S 2.8 0.3 5:42.24 java
29773 pc 20 0 3307036 213004 0 S 2.8 0.3 4:55.32 java
30576 pc 20 0 3173908 224252 0 S 2.8 0.3 7:07.25 java
30824 pc 20 0 3173908 224200 0 S 2.8 0.3 8:20.90 java
30933 pc 20 0 3240472 214660 0 S 2.8 0.3 6:35.04 java
31062 pc 20 0 3307036 214744 0 S 2.8 0.3 8:29.36 java
31120 pc 20 0 3307036 223212 0 S 2.8 0.3 9:35.15 java
解释如下:
第一部分 显示系统概况
第一行 系统的负载程度
依次为:当前时间,系统的运行时间,登录的用户数,系统的平均负载,具体到本例
18:56:37:当前系统时间
up 23:03:系统已经运行的时间
1 user:当前有1个用户登录系统
load average: 296.20, 296.00, 302.87:最近1,5,15min的平均负载情况
其中平均负载有3个值:最近1分钟的,最近5分钟的,最近15分钟的平均负载。值越大说明系统的负载越高。因为进程可能会有短期的突发性活动,一分钟高负载也正常,但如果近15分钟都很高,可能系统有问题。
如何定义高负载?
- 究竟什么程度才是高负载?这个值取决于系统的硬件配置以及系统上通常运行的程序。对于某个系统来说是高负载而对另外一个系统可能正常。
- 通常,负载值超过2,就说明系统比较繁忙了
第二行 进程概要信息
top输出中,将进程叫任务(task),依次为:
总任务数,运行,休眠,停止,僵化(的任务)
Tasks: 763 total, 1 running, 590 sleeping, 0 stopped, 0 zombie
总共763个任务,1个正在运行,590个在休眠,0个停止,0个僵尸
僵化是进程完成了,但父进程没有响应。
第三行 CPU概要
依次为
**用户,系统,运行,空闲,等待
%Cpu(s): 14.1 us, 1.5 sy, 0.0 ni, 0.0 id, 83.2 wa, 0.0 hi, 1.1 si, 0.0 st
14.1 us:用户空间占用CPU的百分比。
1.5 sy:内核空间占用CPU的百分比。
0.0 ni:改变过优先级的进程占用CPU的百分比
0.0 id:空闲CPU百分比
83.2 wa:IO等待占用CPU的百分比
0.0 hi: 硬中断(Hardware IRQ)占用CPU的百分比
1.1 si:软中断(Software Interrupts)占用CPU的百分比
第四行 内存状态
总共有多少内存,空闲多少,当前用了多少,缓存的内存量
65885076 total :物理内存总量(64GB)
406368 free:空闲的内存(40M)
65322228 used使用中的内存
156480 buff/cache缓存的内存
第五行 swap交换分区信息,和第四行解释一致
备注:
- 第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
- 如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存:18537836k +169884k +3612636k = 22GB左右。
- 对于内存监控,在top里要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
第二部分
显示当前运行中的进程的详细列表,有些列和ps命名的输出类似分别解释如下
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 — 进程名称(命令名/命令行)