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)

まず、私の環境を少し説明する必要があったと思います。OS として gentoo を使用しています。システムに net-libs/nodejs-0.10.10 がインストールされています (実際には 0.10.8 でしたが、問題解決のためにアップグレードしました)。最新の etsy/statsD のクローンを作成しました。 git からのレポ。npm バージョンの statsD も試しましたが、同じ動作をしました。

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 に答える