今天在客户的生产环境中遇到了网络丢包的问题,但是查看我方部署smokeping监控发现对同一条线路监控,我方监控显示正常,判断丢包是由客户服务器负载过高导致,原因及排查思路如下:
使用uptime
命令查看云主机负载
uptime
14:21:39 up 39 days, 22:18, 1 user, load average: 22.03, 20.01, 23.05
看到这个负载感觉目前整个操作系统已经很危险了,负载已经达到了20左右,客户云主机配置为8C8G。
理解Linux处理器负载平均值
以上我们已经使用了uptime
命令对当前的云主机性能进行了查看,但是需要明确的是load average
值到底多少才算正常呢?我们如何判断丢包的原因是不是因为服务器负载过高导致的呢?
load average
三个数值分别代表不同时间段的系统负载情况(一分钟、五分钟、十五分钟)那么我们应该如何使用这三个值进行准确的判断呢?实际上我们更应该注重五分钟、十五分钟的负载值,如果当前一分钟的负载值升高,五分钟以及十五分钟负载值正常,那么我们不需要过于担心,很可能是暂时现象。如果十五分钟负载值过大那就需要引起我们的注意了,需要我们对云主机进行升级配置或对当前集群进行扩容。
那么,问题又来了,现在我们知道查看具体时间的负载值对严重程度进行分析了,那么我们进一步就需要判断负载值为多少才需要我们进行关注呢!
实际上负载值是与CPU个数和核数有关的,负载值不应该超过处理器核心数(本次实例负载值不应该超过8)
我们可以如下理解:单核CPU负载正常值不超过1,n核CPU处理器负载值不超过n。现在我们将CPU比作是一座跨海大桥,CPU的个数与核数比作是这座大桥的车道数,当CPU个数与核数为1服务器负载为1时,可以理解为一条单行道的大桥上已经拥堵满了车辆无法在继续前行,后续车辆只能等待前方车辆通过后继续前行,如果CPU个数或核数为8,相当于此条大小的可行车道数为8,理论情况下是当负载达到8时将所有车道堵满无法通行,相信这样就很好理解了。
曾几何时,我对多核和多个处理器有所误解,就技术而言我接触更多的是多核处理器,下面简单的描述下他们之间的区别。
- 多核处理器:将多个核心进行集成,例如:一个双核处理器可以同时执行多个不同的进程,大大的提升了系统的处理速度,多个核心在一个芯片上,它们之间的通讯也更快,功耗更低,弊端是所有的压力集中与一个物理处理器,压力过大导致处理器达到瓶颈,有宕机风险。
- 多个处理器:服务器上安装多个处理器,例如:多个处理器分别处理不同的进程,同样提高了系统的处理速度,但是多个CPU的功耗、体积更大,数据之间通讯更慢,这种分布式系统之间面临着很多问题,如:一个处理器正在处理一个进程,突然出现故障,这个进程后续谁来处理?以及如何协调这些处理器进行工作,这些都是分布式计算将要面临的挑战。
目前而言,多核处理器仍是市场主流。以上的解释可以用下图更形象的进行展示。
预警值
如果将CPU比喻为人的话,负载值比喻为工作,我们当然不会让手中的工作达到100%也就是1,所以当负载值超过50%时就需要我们警示了,尽快排查原因,如果真的是无法进行优化处理,那么就尽快进行扩容。CPU真幸福压力大了还可以罢工,人就不是了--活着干,死了算。