TOP命令的解释

TOP命令的解释

 

1.    16:11为当前系统运行时间 

2.    up  系统运行时间为73天19小时53分钟

3.    user  当前登录用户数

4.    load average 5.96、6.86、6.93  系统负载,任务队列不同时间段平均长度,分别为1分钟,5分钟,15分钟前到现在

5.    Tasks   1235 total,  当前进程总数

6.    2 running   正在运行的进程数

7 .   1233 sleeping   睡眠的进程数

8.    0 stop    停止的进程数

9.    0zombie   僵尸进程数

10  Cpu(s):  13.5%us,  用户空间占用CPU百分比

11                  1.3%sy,  内核空间占用CPU百分比

               0.0%ni, 用户进程空间内改变过优先级的进程占用CPU百分比

      85.1%id 空闲CPU

      0.0%wa  等待输入输出的CPU时间百分比

      0.0%hi    硬中断

      0.1%si    软中断

      0.0%st    实时

12.  Mem    264397992KB  total,      (250G)     内存总容量

                     227985520k   used,   (217G)使用的物理内存总量

                   36412472k     free,        (34G)      空闲内存总量

                     468688K       buffers,  (457M)  用做内核缓存的内存量

 

13.Swap     16777212K   total          (16G)       交换分区总量

                     199504k       used      (195M)  使用的交换分区总量

                     1621725k     free        (1.5G)    空闲的交换分区总量

                     168315904     cached  (160G)     缓冲的交换区总量    


第七行以下:各进程(任务)的状态监控
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 -c 显示完整的命令。

TOP命令的解释

设置信息更新次数

命令:top -n 2

说明:表示更新两次后终止更新显示

设置信息更新时间

命令:top -d 3

说明:表示更新周期为3秒

 

TOP命令的解释

通过上面的显示我们发现Cpu(s)表示的是 所有用户进程占用整个cpu的平均值,由于每个核心占用的百分比不同,所以按平均值来算比较有参考意义。而%CPU显示的是进程占用一个核的百分比,而不是整个cpu(12核)的百分比,有时候可能大于100,那是因为该进程启用了多线程占用了多个核心,所以有时候我们看该值得时候会超过100%,但不会超过总核数*100。

 

 

以下是我们的CPU状况:

TOP命令的解释

        Architecture: #架构 
  CPU(s): #逻辑cpu颗数 
  Thread(s) per core: #每个核心线程 
  Core(s) per socket: #每个cpu插槽核数/每颗物理cpu核数 
  CPU socket(s): #cpu插槽数 
  Vendor ID: #cpu厂商ID 
  CPU family: #cpu系列 
  Model: #型号 
  Stepping: #步进 
  CPU MHz: #cpu主频 
  Virtualization: #cpu支持的虚拟化技术 
  L1d cache: #一级缓存(google了下,这具体表示表示cpu的L1数据缓存) 
  L1i cache: #一级缓存(具体为L1指令缓存) 
  L2 cache: #二级缓存

物理内存使用竟然会这么高,于是我继续问自己这不可能。如果高达217GB的内存被实际使用,系统将会变得很脆弱。

多数的linux系统在free命令后会发现free(剩余)的内存很少,而自己又没有开过多的程序或服务。linux的内存管理机制与windows的有所不同。具体的机制我们无需知道,我们需要知道的是,linux的内存管理机制的思想包括(不敢说就是)内存利用率最大化。内核会把剩余的内存申请为cached,而cached不属于free范畴。当系统运行时间较久,会发现cached很大,对于有频繁文件读写操作的系统,这种现象会更加明显。

 

直观的看,此时free的内存会非常小,但并不代表可用的内存小,当一个程序需要申请较大的内存时,如果free的内存不够,内核会把部分cached的内存回收,回收的内存再分配给应用程序。所以对于linux系统,可用于分配的内存不只是free的内存,还包括cached的内存(其实还包括buffers)。即:

可用内存;=free的内存+cached的内存+buffers的内存

所以,真正的内存利用率 = 可用内存 / 总内存(注意此处 可用内存 由上述公式计算而来,其实这个计算结果在free命令回显中已有,即回显结果第三行"-/+ buffers/cached",此行第二个数值即为加上了buffers和cached之后的内存,即为上述公式所算的可用内存 

我们free一下

TOP命令的解释

事实上可用物理内存还有192G 只是大多数被Cache。之所以被Cache是因为linux系统这样做可以提高内存的使用率。有频繁文件读写操作的系统的情况这种设计非常先进。

 

Cache高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。

Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。

  Free中的buffer和cache:(它们都是占用内存):

  buffer : 作为buffer cache的内存,是块设备的读写缓冲区

  cache: 作为page cache的内存, 文件系统的cache 

  如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi会非常小。

 

cache是高速缓存,用于CPU和内存之间的缓冲;

buffer是I/O缓存,用于内存和硬盘的缓冲

 

load average 1、5、15分钟内的平均负载分别是5.96、6.86、6.93.不甚理解其含义。于是找到了下面这片博客:

 

https://blog.****.net/zhangchenglikecc/article/details/52103737

以下内容多是来自以上博客。

 

在Linux中,进程分为三种状态,      一种是阻塞的进程blocked process,

                一种是可运行的进程runnable process,     

      另外就是正在运行的进程running process。当进程阻塞时,进程会等待I/O设备的数据或者系统调用。

进程可运行状态时,它处在一个运行队列run queue中,与其他可运行进程争夺CPU时间。 系统的load是指正在运行running one和准备好运行runnable one的进程的总数。比如现在系统有2个正在运行的进程,3个可运行进程,那么系统的load就是5,load average就是一定时间内的load数量均值

 

--------------------------------------------------------------------------------------------------------------------------

 

CPU利用率和Load Average的区别

 

CPU利用率在过去常常被我们这些外行认为是判断机器是否已经到了满负荷的一个标准,看到50%-60%的使用率就认为机器就已经压到了临界了。CPU利用率,顾名思义就是对于CPU的使用状况,这是对一个时间段内CPU使用状况的统计,通过这个指标可以看出在某一个时间段内CPU被占用的情况,如果被占用时间很高,那CPU是否就需要考虑已经处于超负荷运作,长期超负荷运作对于机器本身来说是一种损害,因此必须将CPU的利用率控制在一定的比例下,以保证机器的正常运作。

 Load Average是CPU的Load,它所包含的信息不是CPU的使用率状况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。为什么要统计这个信息,这个信息的对于压力

测试的影响究竟是怎么样的,那就通过一个类比来解释CPU利用率和Load Average的区别以及对于压力测试的指导意义。

 

我们将CPU就类比为电话亭,每一个进程都是一个需要打电话的人。现在一共有4个电话亭(就好比我们的机器有4核),有10个人需要打电话。现在使用电话的规则是管理员会按照顺序给每一个人轮流分配1分钟的使用电话时间,如果使用者在1分钟内使用完毕,那么可以立刻将电话使用权返还给管理员,如果到了1分钟电话使用者还没有使用完毕,那么需要重新排队,等待再次分配使用。