web-dev-qa-db-ja.com

pm2 --max-restarts制限が機能せず、継続的に再起動してクラッシュホストシステム

Pm2を再起動の制限を--max-restartsで制限しようとしましたが、機能せず、疲れましたmin_uptime

Sudo pm2 start server.js --max-restarts=5 

ymlファイルも試してみました

apps:
  - name: node-mt
    script: server-socket.js
    watch: true
    max_restarts: 5
    min_uptime: 5000

しかし、それはアプリケーションの再起動を制限するものではありません。

pm2が定期的にクラッシュした場合、ホストシステムがクラッシュし、メモリ使用量が300mbから800mbに達しました。

アプリ実行時の通常の状態。

enter image description here

アプリケーションがクラッシュしたとき。その後、グラフは非常に高くなります。

メモリの使用率が高いためにホストがクラッシュしないように、最大​​再起動を停止する必要があります。メモリ使用量フラグを制限したくありません。 enter image description here

16
Adiii

PM2 max_restarts ane min_uptimeは完全に正常に動作します。両方の類似性を理解する必要があります。

ドキュメントに従って

アプリがエラーと見なされて再起動が停止するまでの不安定な再起動の連続数(1秒(デフォルト)間隔またはmin_uptimeによるカスタム時間)

つまり、min_uptimeが5000で、max_restartsが5の場合、アプリがクラッシュし、5000ミリ秒未満で5回再起動すると、アプリはエラーと見なされます。 5秒以内に4回再起動した場合、エラーとは見なされず、再起動が続行されます。

この設定でアプリが再起動し続ける場合、つまり、アプリが5秒間に5回再起動していないことを意味します。考えられる解決策は、1時間程度のmin_uptimeで比較的高い数値を与えるか、手動テストで見つけることができます。

私が初めてノードcronアプリでこの問題に遭遇し、次のデモを作成したとき、私はこれを理解する良い時間を持っています。

app.js

setTimeout(function () {
  console.log('killed');
  process.exit(1)
}, 100);

ecosystem.config.json

{
  "apps" : [{
    "name"         : "api",
    "script"       : "./app.js",
    "max_restarts" : 3,
    "min_uptime"   : 300
  }]
}

これはプロセスを強制終了しますが、タイムアウトを130+に変更した場合(理由はわかりませんが、130未満の値で機能し、ms精度であり、最初の再起動まで設定を考慮しない可能性があります)、機能しません。アプリの再起動を開始します。

PM2ドキュメント

P.S。

min_uptimeも文字列で指定できます。

enter image description here

10
Ridham Tarpara