崩溃:由于缓冲区溢出而崩溃的神经节



我使用Ganglia来监控Hadoop Flume Agents的性能。近 1 年来,它一直运行良好。上周 gmetad 开始崩溃,缓冲区溢出。最近几天唯一改变的是,我们开始监测更多的水槽剂实例。

> gmond -V
gmond 3.7.2
> gmetad -V
gmetad 3.7.2

下面是我在命令提示符下使用 debug=100 运行 gmetad 时得到的输出。请建议如何克服缓冲区溢出问题。

Writing Summary data for source atl-ganglia, metric flume.SINK.hdfsSink.StartTime
Writing Summary data for source atl-ganglia, metric flume.CHANNEL.fileChannel.ChannelFillPercentage
*** buffer overflow detected ***: /usr/sbin/gmetad terminated
======= Backtrace: =========
/lib64/libc.so.6(__fortify_fail+0x37)[0x7f9899751597]
/lib64/libc.so.6(+0x100480)[0x7f989974f480]
/lib64/libc.so.6(+0xff8d9)[0x7f989974e8d9]
/lib64/libc.so.6(_IO_default_xsputn+0xc9)[0x7f98996c3639]
/lib64/libc.so.6(_IO_vfprintf+0x41c0)[0x7f9899697190]
/lib64/libc.so.6(__vsprintf_chk+0x9d)[0x7f989974e97d]
/lib64/libc.so.6(__sprintf_chk+0x7f)[0x7f989974e8bf]
/usr/sbin/gmetad[0x40a714]
/usr/sbin/gmetad[0x40841f]
/usr/lib64/libganglia.so.0(hash_foreach+0x59)[0x7f989af731f9]
/usr/sbin/gmetad[0x408151]
/lib64/libexpat.so.1(+0xa836)[0x7f9899e16836]
/lib64/libexpat.so.1(+0xbbce)[0x7f9899e17bce]
/lib64/libexpat.so.1(+0xd4fa)[0x7f9899e194fa]
/lib64/libexpat.so.1(+0xde3b)[0x7f9899e19e3b]
/lib64/libexpat.so.1(XML_ParseBuffer+0x6d)[0x7f9899e1288d]
/usr/sbin/gmetad[0x409ddc]
/usr/sbin/gmetad[0x405116]
/lib64/libpthread.so.0(+0x7a51)[0x7f98999eaa51]
/lib64/libc.so.6(clone+0x6d)[0x7f989973796d]
======= Memory map: ========
00400000-00417000 r-xp 00000000 08:02 1077406                            /usr/sbin/gmetad
00617000-00619000 rw-p 00017000 08:02 1077406                            /usr/sbin/gmetad
00619000-0061a000 rw-p 00000000 00:00 0
0157e000-0159f000 rw-p 00000000 00:00 0                                  [heap]
7f988c000000-7f988c116000 rw-p 00000000 00:00 0
7f988c116000-7f9890000000 ---p 00000000 00:00 0
7f9890f0f000-7f9890f25000 r-xp 00000000 08:02 1569794                    /lib64/libgcc_s-4.4.7-20120601.so.1
7f9890f25000-7f9891124000 ---p 00016000 08:02 1569794                    /lib64/libgcc_s-4.4.7-20120601.so.1
.
.
.
7f989817f000-7f989837e000 ---p 00003000 08:02 1569886                    /lib64/libgmodule-2.0.so.0.2800.8
7f989837e000-7f989837f000 rw-p 00002000 08:02 1569886                    /lib64/libgmodule-2.0.so.0.2800.8/bin/bash: line 1: 19584 Aborted                 /usr/sbin/gmetad
                                                           [FAILED]
当 Flume

代理在 Linux 和 Windows 上运行时,看起来 Flume 以 XML 格式的字符串发送到 Ganglia 的性能数字格式是不同的。从基于Linux的Flume代理中,数字被格式化为Float,而从Windows开始,float被进一步格式化为科学记数法。

这是来自基于 CentOS 的 Flume 代理:

<METRIC NAME="flume.CHANNEL.memoryChannel.ChannelFillPercentage" VAL=**"0.018000000000000002"** TYPE="float" UNITS="" TN="39" TMAX="60" DMAX="0" SLOPE="both">

这是来自基于Windows的Flume代理:

<METRIC NAME="flume.CHANNEL.fileChannel.ChannelFillPercentage" VAL=**"1.7976931348623157E308"** TYPE="float" UNITS="" TN="0" TMAX="60" DMAX="0" SLOPE="both">  

似乎 Ganglia 守护程序 gmetad 解析了 XML 字符串,但在存储在 rrds 中之前确实尝试将字符串转换为数字。当缓冲区溢出发生时。

我停止从基于 Windows 的水槽代理发送数据,现在神经节监控稳定。现在需要找到如何监视基于窗口的代理。

最新更新