2017-02-17 3 views
0

最近、いくつかのリクエストの後にNode.jsアプリケーションサーバーが停止していることに気付きました。より多くの調査の後、私はそれを特定のエンドポイントに絞り込んだ。このエンドポイントで約30ヒット後、サーバーは応答を停止し、要求のタイムアウトが開始されます。Node.js:サーバーの原因を突き止める方法

要約すると、クライアントはファイルをアップロードし、サーバーはいくつかの予備チェックを行い、新しい処理ジョブを作成し、bullを使用してキューに入れ、クライアントに応答を返します。その後、サーバーはジョブをキューで処理し続けます。ジョブプロセスは、Redisデータベースからジョブデータを取得すること、ジョブが完了するとWebSocket接続を開いてジョブの状態をチェックすること、およびサーバに書き込むことを含む。私はこれらの事のいずれかがハングアップを引き起こしている可能性があることを理解しています。

例外や例外がスローされたりログに記録されることはありません。私が見ているのはリクエストがタイムアウトすることだけです。私は、ノードインスペクタを使用して、ハングアップを引き起こしているものを見つけようとしていますが、何を探すべきかはわかりません。私の質問がある

ABCインスタンスが作成されている、あまりにも多くの、またはXYZの接続が開いている、あまりにも多くを把握するために、デバッガや他のいくつかの手段を使用して、ハングアップの根本原因を特定する方法があります。

答えて

2

多くのノードサーバーのデバッグは、次のツールを使用して実行できます。

Nodemonは、ノードのようにエラーを表示するため、デバッグを行う優れたツールですが、新しい変更に基づいてサーバーを再起動しようとします。停止/開始の多くを取り除く。 https://nodemon.io/

最後に、郵便番号をお勧めします。郵便配達員はサーバーにリクエストを手動で送信し、検索の絞り込みに役立ちます。 https://www.getpostman.com/

+0

チップをありがとう。私はすでにノーデモンとポストマンを使用しています。郵便配達員は私を隔離するのを助けた – Inn0vative1

0

この場合、Node.js固有の問題ではありませんでした。私は1つのコードパスでデータベース接続を漏らしていました。あなたがデータベース接続を使い果たすと、あなたのノードサーバーが応答を停止するという難しい方法を学びました。リクエストはハングアップするようです。 Postgresの上で、これを追跡するために

良い方法は、少なくとも、クエリを実行することである:

開いているすべてのデータベース接続を示しています
SELECT * FROM pg_stat_activity 

だけでなく、クエリがその接続で最後に実行されました。次に、クエリが呼び出された場所のコードを確認できます。これは、リークを追跡するのに役立ちます。

+0

私の知らなかったことは申し訳ありませんが、 "私はデータベース接続を漏らしていました"とはどういう意味ですか? – aguertin

+0

私はデータベース接続プールを使用しています。これは、いつでも必要なときに使用できる接続プールを維持します。いつでも私はプールから接続を取得し、私のクエリを実行し、私はそれが完了したことを確認して、将来の使用のためにプーさんへの接続を返します。そうしないと、接続がプールに返されず、最終的に接続が不足し、アプリケーションがハングアップすることになります。私はこのプールライブラリを使用しています:https://github.com/brianc/node-pg-pool – Inn0vative1

関連する問題