在使用Smokeping的时候,有时候会出现一种情况,明明根本没有丢包,rrd绘图却是断断续续的。本以为是rrd处理问题,又怀疑了网络速度问题,甚至连机器性能都怀疑过,但是这并不是问题的所在。

在一番折腾之后使用time命令追踪fping的运行时间发现了问题。每一轮fping的耗时是80秒左右,而/var/log/messages输出了大量异常,内容就是超时了。提示WARNING: smokeping took 93 seconds to complete 1 round of polling. It should complete polling in 60 seconds。也就无法正常上报数据了。

那么为什么会超时呢?

这个60秒是我们设定的ping间隔,也就是每隔60秒执行一次fping。而smokeping的设计是在这60秒内必须执行完毕fping,tcpping等所有的ping,然后在60秒到来的时候启动下一轮ping。

那么我们花费了93秒肯定是无法达成目的的。如何缩短这个时间呢?

首先我们修改ping次数以及超时时间。最好确保80%安全时间。何为80%安全时间?这个是smokeping推荐的一个安全数值。如何计算这个安全时间呢

首先,你的每一轮ping间隔是x(秒),你的fping最大超时时间是z(秒),你的ping次数是a,那么函数安全时间满足y=0.8*x。

a*z<y即可确保数据传达正常。

例如间隔60秒,fping最大超时2秒,ping10次,那么安全时间y=0.8*60,也就是48秒。

a*z=2*10=20秒,20秒<48秒,该轮数据可以完整被传递。也就不会出现断续的现象了。


你是否也像清风拂过花儿一样与我相遇呢?