我在etsy的statsD遇到了一些麻烦,看到我对javascript并不是很有经验,我想我应该问一个问题,也许有人以前遇到过这个错误,因为不幸的是这一次google并没有那么有帮助。
麻烦是几天前开始的,当时我决定重启保持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,但我在搜索问题解决方案时进行了升级),并且我已经从git克隆了最新的etsy/statsD代码库。我也尝试过statsD的npm版本,但得到了相同的行为。
我尝试使用strace跟踪程序,并找到了错误,但我不知道如何继续。我猜测失败的系统调用如下所示:
setsockopt(11, SOL_SOCKET, 0xf /* SO_??? */, [1], 4) = -1 ENOPROTOOPT (Protocol not available) <0.000009>但它必须从statsD内部的某个地方调用(使其更容易调试),但我找不到它。
我非常感谢任何形式的小帮助或指示,因为我猜错误来自于node.js库,而我对它们一无所知。谢谢。
发布于 2013-07-17 09:18:26
与@user1135类似,在debian/testing的最新版本中,绑定到UDP套接字时遇到了问题。我们注释掉了udp.c中的#ifdef部分,并重新编译以修复该问题。
发布于 2013-07-04 14:20:44
我最近也在Gentoo Linux上遇到了类似的问题。碰巧我安装了3.9版的linux头文件,但仍然在运行一个较旧的内核。这导致在构建node.js (特别是uv)时定义SO_REUSEPORT。返回到正确的头文件版本或在deps/uv/src/unix/udp.c中执行#undef SO_REUSEPORT应该可以修复它。同样,升级到3.9+内核也可以做到这一点。
https://stackoverflow.com/questions/17419624
复制相似问题