2017-10-16 1 views
0

PM2管理対象ノードクラスタでランダム再起動が発生しています。エラーログに表示される唯一の症状は、次のパターンです - dns.jsのENOTFOUND謎のENOTFOUNDをデバッグするには?

Error: getaddrinfo ENOTFOUND walkinto.inhttp walkinto.inhttp:80 at errnoException (dns.js:28:10) at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)

明らかに問題が不正なサーバー名です - walkinto.inhttpが正しくありません、それはwalkinto.inでなければなりません。これは、コードにハードコードされたホスト名ではありません。このかなり大きなコードベースには、名前解決を行う多くの場所があり、動的な性質を持っています。

私は根本原因を突き止めるのにかなりの時間を費やしましたが、これまで運がなかったのです。 dns.jsからより多くのログ情報を出力するのに助けが必要です。おそらくコールスタック 'may'は前進するのに役立つでしょう。

Q1:nodejsコアモジュールの詳細なログ記録を有効にするにはどうすればよいですか?

Q2:ENOTFOUNDのnodejs再起動を引き起こす原因は何ですか?再起動を避ける方法 - このパスは望ましくありません。

質問3:この問題を解決する他のスマートな方法がありますか?私たちはあなたが上に行くためにいくつかのコードせずに問題を解決するための方法はありませんので

+0

このエラーにつながるコードを含めることができますか?参照してください:https://stackoverflow.com/help/mcve – Svenskunganka

+0

いいえ私はこのエラーの原因についての手掛かりはありません。エラーハンドラとログをすべての疑わしいコードに追加しようとしました - http.get、http.post request()... – WalkInto

答えて

0

することは、私はあなたの質問にお答えします:inspectオプション付き

How to enable more detailed logging on nodejs core modules?

実行ノードとChromeでデバッガにアタッチDevToolsまたは別のアプリケーション。これらのリンクを参照してください。
https://nodejs.org/api/debugger.html
https://nodejs.org/en/docs/guides/debugging-getting-started/

What could cause a nodejs restart to happen for an ENOTFOUND? How to avoid a restart - This path is not desirable.

ノードランタイムが再起動されていません。表示されているエラーはthrow new Error(`getaddrinfo ${err}`)に似たものから生成され、キャッチされていないエラーthrowが実行時にクラッシュします。
PM2経由でアプリケーションを実行しているため、再起動しています。--no-autorestartオプションをPM2に渡すことで無効にすることができます。アプリケーションがクラッシュしないようにするには、try/catchブロックで生成される可能性のあるコードをすべてラップし、エラーから回復しようとする必要があります。

Are there any other smarter way to trouble shoot this problem?

これが最も可能性が高いdns STDLIBモジュールとの問題ではありません。私が正しく理解していれば、あなたは動的に生成されたデータの名前解決を実行しています。これがあなたの問題です。コードのどこかに、生成されたデータを検証していないか、バグのために無効なデータを生成している1つ以上の関数があります。私たちは残念ながらそれを解決するのを手助けすることはできません。あなたがどのようなコードがこれを引き起こしているのかを突き止め、その質問を更新しようとするとよいでしょう。

+0

再起動しているプロセスにはサーバ側のスレッドルーチンがありません。 REST呼び出しのみを処理します。おそらく30〜40種類のAPIがあります。毎日の取引量は50〜60,000通です。それは数千のウェブサイトで使用されています。私はサーバ側で見ることができる再起動パターンは別として、失敗した呼び出しは観察されません。もし私がこの失敗の呼び出しスタックを得ることができたなら、非同期呼び出しの原点を特定することは大いに役立つでしょう(コアライブラリにもっと多くのログを書き込む方法はありますか?)生産プロセスにデバッガを接続して、適切ではないかもしれません。 – WalkInto