top

$ top
top - 02:06:55 up 4 days,  6:32,  4 users,  load average: 0.00, 0.01, 0.05
Tasks: 120 total,   2 running, 118 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   999920 total,   110224 free,   420940 used,   468756 buff/cache
KiB Swap:  2097148 total,  2072824 free,    24324 used.   317452 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 20408 root      20   0  305080   5160   3796 S  0.7  0.5   4:52.11 vmtoolsd
 73034 root      20   0  157704   2212   1552 S  0.7  0.2   0:05.82 top
 73239 root      20   0  157708   2156   1500 R  0.3  0.2   0:00.02 top
     1 root      20   0  144336   5540   3040 S  0.0  0.6   0:08.17 systemd
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.10 kthreadd
     3 root      20   0       0      0      0 S  0.0  0.0   0:05.03 ksoftirqd/0
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
     8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
     9 root      20   0       0      0      0 R  0.0  0.0   2:27.79 rcu_sched
    10 root      rt   0       0      0      0 S  0.0  0.0   0:02.52 watchdog/0
    12 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs
    13 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns
    14 root      20   0       0      0      0 S  0.0  0.0   0:00.16 khungtaskd
    15 root       0 -20       0      0      0 S  0.0  0.0   0:01.26 writeback
    16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd
    17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset
    18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kblockd
    19 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 md
    25 root      20   0       0      0      0 S  0.0  0.0   0:04.35 kswapd0
    26 root      25   5       0      0      0 S  0.0  0.0   0:00.00 ksmd
    27 root      39  19       0      0      0 S  0.0  0.0   0:02.24 khugepaged
    28 root      20   0       0      0      0 S  0.0  0.0   0:00.00 fsnotify_mark
    29 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 crypto
    37 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kthrotld
    39 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kmpath_rda
top - 02:06:55 up 4 days,  6:32,  4 users,  load average: 0.00, 0.01, 0.05
服务器概况: 当前程序名称 - 当前系统时间 系统已运行时间,当前用户登录数量,cpu的平均负载:1,5,15分钟内

Tasks: 120 total,   2 running, 118 sleeping,   0 stopped,   0 zombie
进程信息:进程总数,正在运行进程数,睡眠进程数,停止进程数,僵尸进程数

%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
CPU信息:用户空间CPU占比,内核空间CPU占比,用户进程空间改过优先级的进程CPU占比,空闲CPU占比,待输入输出CPU占比,硬中断(Hardware IRQ)CPU占比,软中断(Software Interrupts)CPU占比,(Steal time) 是当 hypervisor 服务另一个虚拟处理器的时候,虚拟 CPU 等待实际 CPU 的时间占比

KiB Mem :   999920 total,   110224 free,   420940 used,   468756 buff/cache
内存信息:物理内存总量,空闲总量,使用中总量,缓存的内存量

KiB Swap:  2097148 total,  2072824 free,    24324 used.   317452 avail Mem
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:进程名称(命令名/命令行)

load average 在 wikipedia 中的解释是 the system load is a measure of the amount of work that a computer system is doing 也就是对当前 CPU 工作量的度量,具体来说也就是指运行队列的平均长度,也就是等待CPU的平均进程数相关的一个计算值。

我们该如何看待这个load average 数据呢?

假设我们的系统是单CPU单内核的,把它比喻成是一条单向的桥,把CPU任务比作汽车。

  • load = 0 的时候意味着这个桥上并没有车,cpu 没有任何任务;
  • load < 1 的时候意味着桥上的车并不多,一切都还是很流畅的,cpu 的任务并不多,资源还很充足;
  • load = 1 的时候就意味着桥已经被车给沾满了,没有一点空隙,cpu 的已经在全力工作了,所有的资源都被用完了,当然还好,这还在能力范围之内,只是有点慢而已;
  • load > 1 的时候就意味着不仅仅是桥上已经被车占满了,就连桥外都被占满了,cpu 已经在全力的工作了,系统资源的用完了,但是还是有大量的进程在请求,在等待。若是这个值大于2,大于3,超过 CPU 工作能力的 2,3。而若是这个值 > 5 说明系统已经在超负荷运作了。

这是单个 CPU 单核的情况,而实际生活中我们需要将得到的这个值除以我们的核数来看。我们可以通过一下的命令来查看 CPU 的个数与核心数

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l

通过上面的指数我们可以得知 load 的临界值为 1 ,但是在实际生活中,比较有经验的运维或者系统管理员会将临界值定为0.7。这里的指数都是除以核心数以后的值,不要混淆了

若是 load < 0.7 并不会去关注他; 若是 0.7< load < 1 的时候我们就需要稍微关注一下了,虽然还可以应付但是这个值已经离临界不远了; 若是 load = 1 的时候我们就需要警惕了,因为这个时候已经没有更多的资源的了,已经在全力以赴了; 若是 load > 5 的时候系统已经快不行了,这个时候你需要加班解决问题了 通常我们都会先看 15 分钟的值来看这个大体的趋势,然后再看 5 分钟的值对比来看是否有下降的趋势。

查看 busybox 的代码可以知道,数据是每 5 秒钟就检查一次活跃的进程数,然后计算出该值,然后 load 从/proc/loadavg 中读取的。而这个 load 的值是如何计算的呢,这是 load 的计算的源码

我们回归正题,来看 top 的第二行数据,基本上第二行是进程的一个情况统计

PU 利用率,是对一个时间段内 CPU 使用状况的统计,通过这个指标可以看出在某一个时间段内 CPU 被占用的情况,Load Average 是 CPU 的 Load,它所包含的信息不是 CPU 的使用率状况,而是在一段时间内 CPU 正在处理以及等待 CPU 处理的进程数情况统计信息,这两个指标并不一样。

来看 top 的第四行数据,这一行基本上是内存的一个使用情况的统计了

内容 解释

注意

系统的中可用的物理内存最大值并不是 free 这个单一的值,而是 free + buffers + swap 中的 cached 的和 来看 top 的第五行数据,这一行基本上是交换区的一个使用情况的统计了

注意

NICE 值叫做静态优先级,是用户空间的一个优先级值,其取值范围是-20至19。这个值越小,表示进程”优先级”越高,而值越大“优先级”越低。nice值中的 -20 到 19,中 -20 优先级最高, 0 是默认的值,而 19 优先级最低

PR 值表示 Priority 值叫动态优先级,是进程在内核中实际的优先级值,进程优先级的取值范围是通过一个宏定义的,这个宏的名称是MAX_PRIO,它的值为140。Linux实际上实现了140个优先级范围,取值范围是从0-139,这个值越小,优先级越高。而这其中的 0 - 99 是实时的值,而 100 - 139 是给用户的。

其中 PR 中的 100 to 139 值部分有这么一个对应 PR = 20 + (-20 to +19),这里的 -20 to +19 便是nice值,所以说两个虽然都是优先级,而且有千丝万缕的关系,但是他们的值,他们的作用范围并不相同

VIRT 任务所使用的虚拟内存的总数,其中包含所有的代码,数据,共享库和被换出 swap空间的页面等所占据空间的总数 在上文我们曾经说过 top 是一个前台程序,所以是一个可以交互的

常用交互命令 解释 q 退出程序 I 切换显示平均负载和启动时间的信息 P 根据CPU使用百分比大小进行排序 M 根据驻留内存大小进行排序 i 忽略闲置和僵死的进程,这是一个开关式命令 k 终止一个进程,系统提示输入 PID 及发送的信号值。一般终止进程用15信号,不能正常结束则使用9信号。安全模式下该命令被屏蔽。 好好的利用 top 能够很有效的帮助我们观察到系统的瓶颈所在,或者是系统的问题所在

(linux经常管理与查看指令:ps、pstree、top、kill、jobs和nice)[http://blog.csdn.net/watson2016/article/details/71189142]