对于cpu负载的理解
- 系统load高不一定是性能有问题。 因为Load高也许是因为在进行cpu密集型的计算
- 系统Load高不一定是CPU能力问题或数量不够。
因为Load高只是代表需要运行的队列累计过多了。但队列中的任务实际可能是耗Cpu的,也可能是耗i/0或者其他因素的。 - 系统长期Load高,解决办法不是一味地首先增加CPU
因为Load只是表象,不是实质。增加CPU个别情况下会临时看到Load下降,但治标不治本。 - 在Load average 高的情况下需要鉴别系统瓶颈到底是CPU不足,还是io不够快造成或是内存不足造成的。
要想获得服务器的CPU负载情况,有下面几种命令:
w
命令
[root@localhost ~]w
12:12:41 up 167 days, 20:46, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.5 10:01 1.00s 0.11s 0.00s w
root pts/2 192.168.1.5 10:19 1:47m 0.04s 0.04s -bash
uptime
命令(一般首先会根据最后那个15分钟的load负载为准)
[root@localhost ~]uptime
12:12:55 up 167 days, 20:46, 2 users, load average: 0.00, 0.01, 0.05
top
命令
[root@localhost ~]top
top - 12:13:22 up 167 days, 20:47, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 272 total, 1 running, 271 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 65759080 total, 58842616 free, 547908 used, 6368556 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 64264884 avail Mem
对于top命令下第一行的解释:
12:13:22
:表示当前系统时间
167 days, 20:47
:表示系统已经运行了167天20小时47分钟(在这期间没有重启过)
2 users
— 当前有2个用户登录系统
load average: 0.00, 0.01, 0.05
:表示load average
后面的三个数分别是1分钟、5分钟、15分钟的负载情况
这里需要注意
:
load average
数据是每隔5秒钟
检查一次活跃的进程数,然后按特定算法计算出的数值。
如果这个数除以逻辑CPU
的数量,结果高于5
的时候就表明系统在超负荷运转了!!!!!
对上面top命令下第三行cpu的状态的解释:
us(user cpu time)
:用户态使用的cpu时间比。该值较高时,说明用户进程消耗的 CPU
时间比较多,比如,如果该值长期超过 50%,则需要对程序算法或代码等进行优化。sy(system cpu time)
:系统态使用的cpu时间比。ni(user nice cpu time)
:用做nice加权的进程分配的用户态cpu时间比id(idle cpu time)
:空闲的cpu时间比。如果该值持续为0,同时sy是us的两倍,则通常说明系统则面临着 CPU
资源的短缺。wa(io wait cpu time)
:cpu等待磁盘写入完成时间。该值较高时,说明IO等待比较严重,这可能磁盘大量作随机访问造成的,也可能是磁盘性能出现了瓶颈。hi(hardware irq)
:硬中断消耗时间si(software irq)
:软中断消耗时间st(steal time)
:虚拟机偷取时间
vmstat命令
[root@localhost ~]vmstat
procs -----------memory---------------- -----swap-- -----io--- ------system- -------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 1639792 724280 4854236 0 0 4 34 4 0 19 45 35 0 0
解释说明:
procs
部分的解释
r 列
表示运行
和等待cpu时间片
的进程数,如果长期大于1
,说明cpu
不足,需要增加cpu
。
b 列
表示在等待资源
的进程数,比如正在等待I/O
、或者内存交换
等。
memory部分
的解释
swpd
切换到内存交换区的内存数量
(k
表示)。如果swpd
的值不为0
,或者比较大,比如超过了100m
,只要si、so
的值长期为0
,系统性能还是正常.
free
当前的空闲页面列表中内存数量
(k
表示)
buff
作为buffer cache
的内存数量,一般对块设备的读写
才需要缓冲。
cache
: 作为page cache
的内存数量,一般作为文件系统的cache
,如果cache
较大,说明用到cache
的文件较多,如果此时IO中bi
比较小,说明文件系统效率比较好。
swap部分
的解释
si
由内存进入内存交换区数量。
so
由内存交换区进入内存数量。
IO
部分的解释
bi
从块设备读入数据的总量
(读磁盘
)(每秒kb
)。
bo
从块设备写入数据的总量
(写磁盘
)(每秒kb
)
system部分
的解释
in 列
表示在某一时间间隔中观测到的每秒设备中断数。 cs列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
cpu
部分的解释
us 列
显示了用户方式
下所花费 CPU 时间
的百分比。us
的值比较高时,说明用户进程消耗的cpu时间多
,但是如果长期大于50%
,需要考虑优化用户的程序
。
sy 列
显示了内核进程所花费的cpu时间的百分比。
这里us + sy
的参考值为80%
,如果us+sy
大于 80%
说明可能存在CPU不足
。
wa 列
显示了IO等待
所占用的CPU时间
的百分比。这里wa
的参考值为30%
,如果wa超过30%
,说明IO等待严重
,这可能是磁盘大量随机访问
造成的,也可能磁盘或者 磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
id 列
显示了cpu处在空闲状态
的时间百分比