top统计信息
如果你们觉得服务器比较卡顿,通常会连接服务器,使用top命令查看,下面对top命令查看到的资源进行介绍:
第一行: 任务队列信息
top - 14:48:04 up 1:01, 3 users, load average: 0.01, 0.02, 0.05
top - 14:48:04 up 1:01 :当前时间以及系统已经运行的时间,服务器只要不关机,这个时间是一直递增的
3 users: 表示有多少个用户连接进来,可以用who命令查看具体是谁登陆了(这里要注意的,不能理解成有多少个账户登录进来,因为linux系统是多用户系统,同一个账户可以被多人同时登录)
load average:用来表示系统平均负载。系统平均负载指的是在特定时间间隔内运行队列平均长度,也就是等待cpu的平均活跃进程数。(平均负载是用来衡量cpu的工作量,所以系统平均负载是服务器是否卡顿的最关键信息)。
load average: 0.01, 0.02, 0.05
第一个数字:从当前时间点到过去1分钟系统的平均负载
第二个数字:从当前时间点到过去5分钟系统的平均负载
第三个数字:从当前时间点到过去15分钟的系统的平均负载
场景分析:第一个数字远大于第二个数字,说明服务器压力正在上升
第一个数字小于第二个数字,说明服务器压力正在下降
第一个数字小于第二个数字,第二个数字也小于第三个数字,说明服务器压力逐渐再下降
第一个数字大于第二个数字,第二个数字也大于第三个数字,说明服务器压力在逐渐上升
第一个数字大于第二个数字,第二个数字却小于第一个数字,说明服务器压力正在上升,在过去一段时间,服务器在恢复正常。
load average数值多大为大,多少为少?
答:load average数值与逻辑cpu个数有关。
查看有几个逻辑cpu,执行完top命令,按键盘数字1即可,如下图可以看到有2个逻辑cpu(这里看到的是逻辑cpu,不是物理cpu)
在判断服务器压力是否比较大,我们要看cpu核数,当超过cpu核数时,我们就认为服务器压力比较大
注意:
1.在没有开启超线程的情况下,逻辑cpu的个数就等于cpu内核数,所以我们一般就看逻辑cpu个数,load average大于逻辑cpu个数,就认为服务器负载比较大。即:平均负载/cpu核数,值一般要在0.00-1.00之间才算正常
逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数
2.Linux系统,load average数据是默认每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果在0.00-1.00之间才算正常,否则就表明系统在超负荷运转了。
3.查看系统负载命令:top.uptime,cat都可以查到系统负载
[root@vircent7 ~]# cat /proc/loadavg
0.01 0.02 0.05 1/239 2146
前三个数字大家都知道,是1、5、15分钟内的平均进程数(有人认为是系统负荷的百分比,其实不然,有些时候可以看到200甚至更多)。后面两个呢,一个的分子是正在运行的进程数,分母是进程总数;另一个是最近运行的进程ID号。
[root@vircent7 ~]# top
top - 11:30:31 up 1:50, 1 user, load average: 0.01, 0.02, 0.05
[root@vircent7 ~]# uptime
11:33:03 up 1:53, 1 user, load average: 0.00, 0.01, 0.05
4.如果一个进程满足以下条件则其就会位于运行队列中:
- 它没有在等待I/O操作的结果
- 它没有主动进入等待状态(也就是没有调用'wait')
- 没有被停止(例如:等待终止)
总结:load average返回的是当前的活跃进程数(运行的进程数 + 等待运行的进程数)
活跃进程包括:1)当前正在运行的进程(nr_running);2)不可中断的sleeping进程(如正在执行IO操作的被挂起进程)
第三行:cpu信息
%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
us: cpu用户态使用率。比如,程序写的代码属于用户态,在用户空间执行程序需要占用cpu的百分比。该值较高时,说明用户进程消耗的 CPU 时间比较多,比如,如果该值长期超过 50%,则需要对程序算法或代码等进行优化。
sy: cpu内核态使用率。比如,执行代码,底层实现,属于内核态,在内核空间调用程序需要占用cpu的百分比。
参考文章:https://blog.csdn.net/qq_39823627/article/details/78736650
ni: 用户进程空间内,改变过优先级的进程占用CPU百分比。ni是nice的缩写。
什么是nice?NICE值,它是反应一个进程“优先级”状态的值,其取值范围是-20至19,一共40个级别。
这个值越小(-20最小),表示进程”优先级”越高,而值越大“优先级”越低。
举例子说明:
在英语中,如果我们形容一个人nice,那一般说明这个人的人缘比较好。什么样的人人缘好?往往是谦让、有礼貌的人。
比如,你跟一个nice的人一起去吃午饭,点了两个一样的饭,先上了一份后,nice的那位一般都会说:“你先吃你先吃!”,这就是人缘好,这人nice!但是如果另一份上的很晚,那么这位nice的人就要饿着了。
这说明什么?
越nice的人抢占资源的能力就越差,而越不nice的人抢占能力就越强。对比到进程里面,nice值越低,说明该进程抢占cpu的能力就越强,优先级就越高。
在原来使用O1调度的Linux上,我们还会把nice值叫做静态优先级,这也基本符合nice值的特点,就是当nice值设定好了之后,除非我们用renice去改它,否则它是不变的。
id: idolt缩写。用来表示空闲资源占用百分比,99.8id表示有99.8%的cpu处理器资源处于空闲。如果该值持续为0,同时sy是us的两倍,则通常说明系统则面临着 CPU 资源的短缺。
外文:%id表示 Show the percentage of time that the CPU or CPUs were idle and the system did not have an outstanding disk I/O request.
翻译:显示CPU或CPU空闲且系统没有未完成的磁盘I/O请求的时间百分比。
wa:wait缩写。用来表示IO(换入换出)等待占用cpu百分比。IO一直在等待,就意味着一直占用内存,会导致内存升高。
外文:%wa表示 Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.
翻译:显示系统有未完成的磁盘I/O请求时CPU或CPU处于空闲状态的时间百分比。
总结:%wa 不单单是cpu使用情况或磁盘io使用情况,而是表明 cpu空闲着但是有许多等待磁盘的操作出现。如果cpu本身已经使用率很高。同时io操作很多。%wa值也不一定很高。此时也可能io操作出现问题。
hi:Hardware IRQ缩写。用来表示硬中断占用的cpu百分比。比如任务管理器,强制结束进程就是硬中断
si:Software Interrupt缩写。用来表示软中端占用的cpu百分比。比如学生上课一边记笔记一边上课,正在上课,学生突然停下来去记笔记,此时就是自主的软中端,记完笔记,又开始听课。自主的切换回去
st:Steal Time缩写 ,就是 Xen Hypervisor 分配给运行在其它虚拟机上的任务的实际 CPU 时间。是当
hypervisor服务另一个虚拟处理器的时候,虚拟CPU等待实际CPU的时间的百分比.
在正常情况下在云平台下st最好为0,这表明你的vm得到了所有必要的cpu资源。如果这个值为50,表明你vm需要cpu时有一半时间在等待。如果这个值为100%,那么表明你的vm花了100%的时间等待真实的cpu资源。
Steal
值比较高的话,你需要向主机供应商申请扩容虚拟机。服务器上的另一个虚拟机可能拥有更大更多的
CPU
时间片,你可能需要申请升级以与之竞争。另外,高
steal
值可能意味着主机供应商在服务器上过量地出售虚拟机。如果升级了虚拟机,
steal
值还是不降的话,你应该寻找另一家服务供应商。