2016-12-16 27 views
2

これがkoaに関連しているか、他のnpmモジュールなどの問題であるかどうかわかりません。私はここから始めるつもりです。これが間違っている場合は、適切な場所に移動します。私はちょうどそれをどこかに書く必要があります、それは私を夢中にしています。奇妙なECONNRESETエラー

だから問題です。私はkoa v1で書かれたREST APIを持っています。 Dockerイメージでノードサーバーを実行しています。私たちが持っているエンドポイントの1つは、インポートを開始し、メッセージ: "import started"でステータス200を返し、インポートが完了すると、スラックメッセージを送信して私たちに通知します。

最初にローカルマシンでサーバーをテストしましたが、すべてが動作します(エンドポイントはエラーをスローしません)。それから私はドッカーのイメージを構築しました。私はコンテナlocalyを実行し、すべてが動作します(エンドポイントは何のエラーもスローしません)。私はMesos環境に自分のイメージを展開します。コンテナが実行され、すべてのエンドポイントがインポートエンドポイントの横にあります。数秒(5〜10秒)後に呼び出すとECONNRESETエラーが発生し、実行中のコンテナが強制終了され、新しい実行インスタンスが開始されます。インポートが終了します。

ドッカーコンテナに128 MBのRAMを割り当てましたが、これで十分です。インポートエラーが発生した後、おそらくOOMがプロセスを終了させたと考えました。そこで、dmesgをチェックすることにしました.OOMや実行中のコンテナのプロセスに関連するログエントリが見つかりませんでした。次に、localyのコンテナ(htop)のRAM使用状況を確認し、aproxを使用していることを確認しました。 250 + MB、私たちはマラソンの設定(512 MB)でさらにラムを追加することにしました。しかし、それは助けにはならなかった、同じエラーが発生しました。

エラーが十分に明示されていないため、longjohnモジュールをインストールしたので、より詳細なエラーメッセージが表示される可能性があります。それは私たちにちょっとだけ多くの情報を与えましたが、私たちが思ったほど多くはありませんでした。

Error: read ECONNRESET 
     at exports._errnoException (util.js:1026:11) 
     at TCP.onread (net.js:569:26) 
    --------------------------------------------- 
     at Application.app.callback (/src/node_modules/koa/lib/application.js:130:45) 
     at Application.app.listen (/src/node_modules/koa/lib/application.js:73:39) 
     at Promise.then.result (/src/server.js:97:13) 


    Error: read ECONNRESET 
     at exports._errnoException (util.js:1026:11) 
     at TCP.onread (net.js:569:26) 

server.jsのライン97は、次のとおりです。インポートエンドポイントの

96:if(!module.parent) { 
97: app.listen(port, (err) => { 
98:  if (err) { 
99:   console.error('Server error', err); 
100:  } 
101:  console.log('Listening on the port', port); 
102: }); 
103:} 

ラフロジック: だから何が正確にエンドポイント・ロジックで起こります。私たちはpostgres npmモジュールpgを使用しています。文脈にpg.Poolを渡しているので、後で我々のモデルでそれを使うことができます。私たちは、配列内の約束とプッシュ約束にカプセル化された挿入クエリを実行しています。およそ2700以上のレコードがあります。後で我々はPromise.allを約束し、thenと一緒にメッセージをSlackに送る。

ご覧のとおり、エラーがkoaまたはpgまたは他のものに関連するかどうかはわかりません。もっと興味深いのは、localyのすべてが動作することです(ノードサーバーとドッカーのコンテナ)が、mesosではそうではありません。私は、何が間違っているかを見つけるためのヒントやヒントに感謝します。

  • KOA NPMモジュールのバージョン:PGのNPMモジュールの1.2.0
  • バージョン:Postgresの9.5
  • の6.1.0
  • バージョンMesosのバージョン:1.0.1

編集:

他の開発者のおかげで、私たちはERRORの原因。インポート実行中にプール内のすべての接続を使用しました。マラソンがインポート時にサービスステータスを要求していたときに、サービスはデータベースに接続しようとして接続をテストし、その時点でデータベースへの接続が終了しました。サービスが不健全になり、マラソンがサービスを再開しました。私たちは輸入コードを改訂しました。プール接続の数を制限しています。

よろしくお願いいたします。

+0

私はほぼ同じ問題を抱えています。 postgresとpgを使う。 – Yesha

+0

これはまだ修正しましたか? – Yesha

+0

その後、私は時間がなかったし、何かを確認したり証明したりすることができなかった。 – daniyel

答えて

0

別の開発者のおかげで、私たちはエラーの原因を見つけました。インポート実行中にプール内のすべての接続を使用しました。マラソンがインポート時にサービスステータスを要求していたときに、サービスはデータベースに接続しようとして接続をテストし、その時点でデータベースへの接続が終了しました。サービスが不健全になり、マラソンがサービスを再開しました。私たちは輸入コードを改訂しました。プール接続の数を制限しています。

よろしくお願いいたします。

0

this github issueによると、これはtiny-lrによって引き起こされるエラーです。

バージョン0.2.1にダウングレードすると停止するようですが、これは通常、使用している他のパッケージの依存関係です。あなたのような、この除き、すべてのエラーを表示することによって、エラーをフィルタリングすることができるかもしれない:

if (error.code !== 'ECONNRESET') { console.log(error) } 

問題がまだ開いている、そしてそれは固定されます場合は10月27日、2016年からの日付が分からないのですかない。しかし、フィードバックがある限り、それは危険なエラーのようには見えないか、まったく影響を与えません。しかし、heh、私はむしろ方法があれば私もあまりにも修正したいと思います。