pm2 --max-restarts限制不起作用并且连续重启崩溃主机系统

时间:2018-03-09 13:46:03

标签: node.js docker pm2

我尝试使用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

1 个答案:

答案 0 :(得分:6)

PM2 max_restarts ane min_uptime完美无缺。你需要理解两者的类比。

根据文件

  

连续不稳定重启的次数(小于1秒(默认)   在考虑您的应用之前,通过min_uptime的间隔或自定义时间   错误并停止重新启动

这意味着如果您的min_uptime为5000且max_restarts为5,那么如果应用程序崩溃并在不到5000毫秒内重启5次,您的应用程序将被视为错误。如果它在5秒内重新启动4次,则不会将其视为错误并继续重新启动它。

如果您的应用继续使用此配置重启,则意味着您的应用未在5秒内重启5次。可能的解决方案是在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 pricision而不考虑配置直到第一次重启)然后它赢了'工作。它将开始重新启动应用程序。

PM2 documnetation

P.S。

min_uptime也可以用字符串给出。

enter image description here