问题
在服务器中我们发现,他们的负载会在大约每隔7个小时(准确来说是6小时56分45秒)就会出现一个峰值,不管是否是在生产环境下。
有能力和小伙伴可以直接看下面的文档:
https://mackerel.io/blog/entry/tech/high-loadavg-every-7-hours
https://blog.avast.com/investigation-of-regular-high-load-on-unused-machines-every-7-hours
为什么
根据负载的算法,它记录了一段时间内cpu的使用情况的值,负载每5秒会更新一次,那么根具CONFIG_HZ的值得出系统会在每1ms记录一个jiffies值,那么5秒的时间内会记录5000个值,于是在周期为5×5000得到25000秒。当打开进程的时间和loadavg大约每6小时57分钟更新一次(关闭0.003秒)时,就会出现这种现象。
cat /boot/config-* | grep HZ #得到config_HZ的值
计算的公式
L(t)=(1−e−Δt/T)(p(t)+e−Δt/Tp(t−Δt)+e−2Δt/Tp(t−2Δt)+⋯)=(1−e−Δt/T)p(t)+e−Δt/TL(t−Δt)
负载是衡量cpu在一段时间内被都少个进程(R进程和D进程,即正处在运行的)使用的一个量度,而这个负载是在5.001秒更新一次的,由于服务器的jiffies值为1000(表示一秒会记录测次数),也就是说5秒的时间里会出现记录5000次,而负载会在这每五千次发生偏移所以等到下一个出现了整数5秒的周期是5.001*5000结果证实为6小时56分45秒,由于负载计算的特点,会在进程没有变化时负载数猛增,之后恢复正常的。
是由这个查询系统参数
cat /boot/config-* | grep HZ
网友评论