3

我在使用 etsy 的 statsD 时遇到了一些麻烦,并且看到我对 javascript 并没有真正的经验,我想我应该问一个问题,也许有人以前遇到过这个错误,因为遗憾的是这次谷歌并没有那么有帮助。

几天前,当我决定重新启动保持 statsD 正常运行的节点进程时,麻烦就开始了,但重新启动后它就无法启动。它给了我以下输出:

2 Jul 03:02:08 - reading config file: /opt/statsd/statsd/psrkConfig.js
2 Jul 03:02:08 - server is up
2 Jul 03:02:08 - Loading backend: ./backends/graphite
events.js:72
        throw er; // Unhandled 'error' event
          ^
Error: bind Unknown system errno 92
    at errnoException (dgram.js:440:11)
    at dgram.js:207:28
    at dns.js:72:18
    at process._tickCallback (node.js:415:13)

首先,我认为我应该描述一下我的环境。我正在使用 gentoo 作为操作系统,我在系统上安装了 net-libs/nodejs-0.10.10(实际上是 0.10.8,但我在搜索问题解决方案时升级了)并且我已经克隆了最新的 etsy/statsD来自 git 的回购。我也尝试过使用 statsD 的 npm 版本,但得到了相同的行为。

我尝试使用 strace 跟踪程序并遇到错误,但我不知道如何继续。我猜测失败的系统调用如下:

setsockopt(11, SOL_SOCKET, 0xf /* SO_??? */, [1], 4) = -1 ENOPROTOOPT (Protocol not available) <0.000009>

但它必须从 statsD 内部的某个地方调用(使其更容易调试),我找不到它。

我将不胜感激任何形式的小帮助或指示,因为我猜测错误来自 node.js 库,而我对它们一无所知。谢谢你。

4

2 回答 2

1

类似于@user1135,在最近构建的 debian/testing 上绑定到 UDP 套接字时遇到了麻烦。我们注释掉了 udp.c 中的 #ifdef 部分并重新编译以解决问题。

于 2013-07-17T01:18:25.953 回答
0

我最近遇到了类似的问题,也在 Gentoo Linux 上。碰巧我安装了 3.9 linux 头文件,但仍在运行较旧的内核。这导致在构建 node.js(特别是 uv)时定义了 SO_REUSEPORT。回到正确的标头版本或在 deps/uv/src/unix/udp.c 中执行 #undef SO_REUSEPORT 应该可以修复它。升级到 3.9+ 内核也可以。

于 2013-07-04T06:20:43.957 回答