我们正在使用 Ganglia 监控我们在 Amazon AWS 上的云基础设施。一切都运行正常(指标流动等),只是偶尔 gmetad 进程会突然出现段错误。gmetad 进程在 m3.medium EC2 上运行,监控大约 50 台服务器。这些服务器被分成几组,每组都有一个堡垒 EC2,用于收集指标。gmetad 配置为从这些堡垒(大约 10 个)中获取指标。
一些有用的事实:
- 我们在所有 EC2 上运行 Debian Wheezy
- 崩溃在正常运行时不会生成任何日志,除了一个段错误日志,例如“gmetad[11291]: segfault at 71 ip 000000000040547c sp 00007ff2d6572260 error 4 in gmetad[400000+e000]”。如果我们手动运行 gmetad 并进行调试日志记录,崩溃似乎与 gmetad 执行清理有关。
- 当我们意识到清理过程可能是罪魁祸首时,我们对此进行了更多研究。我们意识到我们的磁盘 IO 太高了,并添加了 rrdcached 以降低它。磁盘 IO 现在低了很多,崩溃发生的频率也降低了,但平均每天还是一次左右。
- 我们有两个系统(开发系统和生产系统)。两者都出现了这种崩溃,但开发系统(它监控的服务器组小得多)崩溃的频率要低得多。
- 生产系统正在运行 ganglia 3.3.8-1+nmu1/rrdtool 1.4.7-2。我们已将开发系统中的 ganglia 升级到 ganglia 3.6.0-2~bpo70+1/rrdtool 1.4.7-2。这似乎对解决崩溃问题没有帮助。
- 我们在两个系统上都运行了 monit,配置为在 gmetad 死机时重新启动。它会立即重新启动,没有任何问题。
有人遇到过这种崩溃吗,尤其是在亚马逊硬件上?我们正在竭尽全力寻找解决方案!