1、什么是负载
服务器负载网上也有许多大牛对其进行了定义和分析。其实从宏观上来看服务器负载是用来反映当前服务器运行状态的。它主要受三个部分影响:CPU使用、IO消耗和内存使用。
负载客观的定义是:系统负载是对当前CPU工作量的度量,被定义为特定时间间隔内运行队列中的平均线程数(也有的书籍称为平均任务数)
我们在Linux服务器上使用top命令可以得到如下图所示的系统状态监控数值:
右上角的 load average,它表示系统在1,5,15分钟的平均工作负载。这个平均工作负载并不是指cpu的使用率,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。显然这个数值越小越好。
中间的id值,表示对应cpu核的空闲率,先然这个值,越大越好。
2、CPU负载和CPU使用率的区别
CPU利用率在过去常常被我们这些外行认为是判断机器是否已经到了满负荷的一个标准,其实不是这样。CPU使用率仅仅表示程序在运行期间实时占用的CPU百分比。举个简单的例子,一个单线程无限死循环,一直占用CPU执行,但是此时服务器并没有其他任务,那么此时服务器CPU的使用率应该是100%,id值几乎是0,但是服务器的平均负载仅仅是1而已。
CPU负载表示一段时间内正在使用和等待使用CPU的平均任务数。CPU使用率高,并不意味着负载就一定大。这两者没有什么必然的联系,CPU使用率高和后面有多少任务在排队没有关系,从随机过程的角度说,有的任务运算量大,有的任务运算量小,每一个CPU内核接到的任务的运算量都是随机的,运算量大的使用cpu高,但是这个和后面有多少任务在排队是没有关系的。