top是一个经常用的命令,平时只是留意一下哪个进程用得比较高CPU或者内存,但这里还是有一些小学问:
Top命令截图
Tasks
Tasks 任务(进程),系统现在共有627个进程,其中处于运行中的有1个,626个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
CPU(s)
top开始显示的是总的CPU使用的状况,而想看每一个逻辑CPU的状态,可按“1”。
关于us/sy/ni/id/wa/hi/si/st的含义:
us:用户空间(user)占用CPU的百分比。
sy:内核空间(system)占用CPU的百分比。
ni:改变过优先级的进程占用CPU的百分比
id:空闲(idle)CPU百分比
wa:IO等待(wait)占用CPU的百分比
hi:硬中断(Hardware IRQ)占用CPU的百分比
si:软中断(Software Interrupts)占用CPU的百分比
st:(Steal Time)当hypervisor服务另一个虚拟处理器的时候,虚拟 CPU 等待实际 CPU 的时间的百分比。
Load Average
Load Averge:系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
Load Averge是怎么观察比较合适呢?其定义为:单个逻辑CPU满载为1.0,超过1.0即为过载运行。一个稳定运行的系统一般是不会一直过载负荷运行的,因此最好观察的是5分钟和15分钟的值。如果这个值除以逻辑CPU数大于1.0的话,可能系统就需要优化才能继续运行。
如何看逻辑CPU的数量?给出Shell代码:
grep 'model name' /proc/cpuinfo | wc -l
Mem
Mem:系统内存的状态
total:交换区总量(64GB)
used:使用的交换区总量(62GB)
free:空闲交换区总量(448MB)
buffers:缓冲的交换区总量(4GB)
Swap
Swap:虚拟内存的状态
total:交换区总量(2GB)
used:使用的交换区总量(0)
free:空闲交换区总量(2GB)
cached:缓存的交换区总量(54GB)
再说多一点:Mem的buffer和Swap的cached
之前在微博很热的一条面试问题:buffer和cached的区别是什么?正好在top的命令出现了,也想多说一点。
buffers:出现在Mem,实际上是要从内存写入硬盘的数据,由于内存和硬盘的IO速度不一样,解决的是写效率的问题;
cached:出现在Swap,实际上是要从硬盘读入内存的数据,由于再读一次硬盘速度会很慢,虚拟内存就将一些次重要的文件放在cached,让二次读取同样数据时间会更快一点。
PID USER PR NI VIRT RES SHR %CPU %Mem Time+ COMMAND
标题够长的,实际要弄清楚的是各种标记的意义。
PID:进程id
USER:运行的用户
PR:进程优先权,代表这个进程可被执行的优先级,其值越小,优先级就越高,越早被执行
NI:进程Nice值,代表这个进程的优先值,越小,优先值越高(负值表示高优先级,正值表示低优先级)
VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES:进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR:共享内存大小,单位kb
%CPU:上次更新到现在的CPU时间占用百分比
%Mem:进程使用的物理内存百分比
Time+:进程使用的CPU时间总计,单位1/100秒
COMMAND:进程名称(命令名/命令行)
重点看看PR和NI的关系:
进程优先级:PRI(new)=PRI(old)+NICE
也就是进程最后的优先级是由PR和NIC共同决定的。
对nice值一个形象比喻,假设在一个CPU轮转中,有2个runnable的进程A和B,如果他们的nice值都为0,假设内核会给他们每人分配1k个cpu时间片。但是假设进程A的为0,但是B的值为-10,那么此时CPU可能分别给A和B分配1k和1.5k的时间片。故可以形象的理解为,nice的值影响了内核分配给进程的cpu时间片的多少,时间片越多的进程,其优先级越高,其优先级值(PRI)越低。%nice,就是改变过优先级的进程的占用CPU的百分比,如上例中就是0.5k/2.5k=1/5=20%。