4

Node.js と Socket.io で実行されている比較的単純なチャット タイプのアプリケーションがあります。ノード サーバーは、Minecraft サーバーからチャット データをストリーミングし、Socket.io を使用して Web サイトに接続されているすべてのクライアントにストリーミングします。システムの実際のデモは、standardsurvival.com /chat にあります。

ほとんどの場合、問題なく動作しますが、たまにノードサーバーが応答を停止し、その後すぐにアクティブな接続が切断されます。この間、プロセスは 100% の CPU を消費し始めますが、メモリは常に比較的一定のままであるため、何らかのメモリ リークが関与しているとは思えません。

問題が何であるかを理解するのに十分なほど一貫して問題を再現できておらず、どこを見ればいいのかわからないため、非常にイライラしています。ループを設定し、ノード サーバーと Web サイトの間のパイプラインのさまざまな部分をコメント アウトして、原因を突き止めようとしました。まだ運がありません。

このシステムの背後にあるコードは、ここここにあります。

何か案は?

4

1 に答える 1

0

さて、私は問題が何であるかを理解することになりました。私が使用しているライブラリは、Minecraft サーバーへの標準の HTTP 要求に対して net.Sockets を開いていましたが、実際には閉じていませんでした。どうやら、リクエストが終了したときに「終了」イベントが呼び出されなかったようです。そのため、最終的にプロセスで使用可能なすべてのファイル ハンドルが使い果たされ、新しい要求が完全に失敗し、サーバーが応答を停止したように見えました。このエラーをログに記録していれば、もっと早くこれを発見できたでしょう。学んだ教訓。

これを少なくとも一時的に修正するために、すべてのソケットにタイムアウトを追加しました。現在、サーバーは何日も問題なく稼働しています:)

于 2013-06-17T18:41:00.963 に答える