崩溃:Ganglia 的 gmetad 由于缓冲区溢出而崩溃
Crashing: gmetad of Ganglia crashing because of Buffer Overflow
我使用 Ganglia 来监控 Hadoop Flume 代理的性能。现在将近 1 年,它一直运行良好。上周 gmetad 开始因缓冲区溢出而崩溃。最近几天唯一发生变化的是我们开始监控更多 flume 代理实例。
> gmond -V
gmond 3.7.2
> gmetad -V
gmetad 3.7.2
下面是我 运行 gmetad 在命令提示符下使用 debug=100 时得到的输出。
请建议如何克服缓冲区溢出问题。
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]
当 Linux 上的 Flume 代理 运行 时,Flume 以 XML 格式的字符串发送到 Ganglia 的性能数字格式似乎不同与 Windows。
从基于 Linux 的 Flume 代理中,数字被格式化为浮点数,而从 Windows 中,浮点数进一步格式化为科学计数法。
这来自基于 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 的 flume 代理发送数据,现在 Ganglia 监控稳定。现在需要了解如何监控基于 windows 的代理。
我使用 Ganglia 来监控 Hadoop Flume 代理的性能。现在将近 1 年,它一直运行良好。上周 gmetad 开始因缓冲区溢出而崩溃。最近几天唯一发生变化的是我们开始监控更多 flume 代理实例。
> gmond -V
gmond 3.7.2
> gmetad -V
gmetad 3.7.2
下面是我 运行 gmetad 在命令提示符下使用 debug=100 时得到的输出。 请建议如何克服缓冲区溢出问题。
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]
当 Linux 上的 Flume 代理 运行 时,Flume 以 XML 格式的字符串发送到 Ganglia 的性能数字格式似乎不同与 Windows。 从基于 Linux 的 Flume 代理中,数字被格式化为浮点数,而从 Windows 中,浮点数进一步格式化为科学计数法。
这来自基于 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 的 flume 代理发送数据,现在 Ganglia 监控稳定。现在需要了解如何监控基于 windows 的代理。