snmpd占用CPU过高

在几个node的cluster环境中发现主node的snmpd进程CPU占用率规律性地定时冲高,top命令中经常能够达到99%,且持续数秒。其他node上snmpd的CPU利用率正常,但是一旦发生failover, slave node变为主node,新的主node上snmpd的利用率又会变高。

这个问题其实影响不大,虽然CPU瞬时冲高,但是LA数据比较正常,4核的机器LA5也只有2点多,LA5只有1点多。

最开始以为是snmpd.conf配置中某些监控行为可能会导致snmpd使用大量计算资源导致CPU过高,但是将配置全部删除,仅使用默认配置,问题依旧。

后来分析应该与主node上跑的某些服务有关,关掉相关服务,CPU利用率并没有立即下降,但是过5~10分钟,数据恢复正常,通过反复尝试,锁定snmpd和OpenNMS相关。问题出现时,OpenNMS定时采集9000多台设备的性能数据,时间间隔是5分钟,通过命令行能够发现在网口上有大量的网络流量,因此怀疑与此相关。

想关命令:

snmpd占用CPU过高_第1张图片

snmpd占用CPU过高_第2张图片

我们知道snmpd作为跑在Linux上的snmp agent,本身除了配置里面需要monitor的一些东西外,还在后台运行了一些标准Mib的数据采集,比如接口流量,ip报文数量等。因为没有查到相关问题的解决方案,我们从两个方面进行了尝试。

1. snmpd对标准Mib又自己的轮询间隔,不同的Mib Table间隔不同,见这篇文章。因此可以尝试将轮询间隔改大,减少系统开销。

2.修改OpenNMS的采集间隔,目前是5分钟,可以修改为15分钟,这样可以减少OpenNMS产生的流量。

经过试验,第一种方案对于CPU几乎没有影响,snmpd采集间隔的变化并不影响系统调用的数量;第二种方案效果非常明显,接口流量下降后,snmpd的CPU利用率随之下降。

因为没有研究过snmpd的源码,猜想,如果snmpd能够根据配置的间隔按需进行系统调用,可能性能会高一些

你可能感兴趣的:(cpu,snmpd,high)