Node JS pm2 最大内存限制

12
我正在使用pm2和nodejs。我想要做的是为一个应用程序设置最大内存限制。我的开发服务器限制在两个应用程序之间的500mb。理想情况下,我希望将其限制为200mb。我需要这个限制成为应用程序的硬性限制,并且不像pm2命令"max_memory_restart"那样在超过限制时重新启动应用程序。我也尝试过使用--max_old_space_size命令,但没有成功。有没有方法可以实现这一点?
示例pm2 json文件
{
  "apps": [
   {
     "name": "Sample",
     "script": "runit.js",
     "watch": false,
     "cwd": "xxxxxx",
     "env": {
       "NODE_TLS_REJECT_UNAUTHORIZED": '0',
       "NODE_ENV": "local_public",
       "PORT": 3000,
       "PROXY_PORT": 4000,
     },
     "args": [
       "--max_old_space_size=200"
     ]
   }
 ]

}


3
如果你只是将“args”替换为“node_args”,你的代码就会起作用。 - Xaqron
https://grizzlybit.info/blog/increase-nodejs-memory-limit - zubair1024
3个回答

25

我使用pm2直接运行Node.js脚本,以下代码适用于我:

pm2 start file.js --max-memory-restart 100M

希望 max-memory-restart 参数对你有用


有没有办法在达到最大内存时不重启程序,只是保持在某个特定的水平以下呢? - N8ALL3N
@MasterN8 至少我不知道如何做到。当服务器停止和重新启动时,您将无法访问该服务器。减少重启频率的方法是改进代码以减少内存泄漏,并合理设置内存限制。 - zhangjinzhou
3
赞同!有些人甚至在你问为什么被踩的时候也不评论。 - zhangjinzhou
1
@zh max_memory_restart 的默认限制是多少。 如果我不添加它,它会完全重新启动吗? - Haseeb Burki
1
@Burki 1300MB 是默认限制。 - Vardan

10

你需要使用node_args代替args。此外,为了安全起见,您可以手动设置max_memory_restart选项,这将使您在进程崩溃之前重新启动它。

{
  "apps": [
   {
     "name": "Sample",
     "script": "runit.js",
     "watch": false,
     "cwd": "xxxxxx",
     "env": {
       "NODE_TLS_REJECT_UNAUTHORIZED": '0',
       "NODE_ENV": "local_public",
       "PORT": 3000,
       "PROXY_PORT": 4000,
     },
     "max_memory_restart": "180",
     "node_args": [
       "--max_old_space_size=200"
     ]
   }
 ]
}

max_memory_restart number should have M at the end: "max_memory_restart": "180M" - Allan Jiang

1

你说你已经尝试使用 --max-old-space-size 命令了,但没有成功。

看起来你尝试通过 "args" pm2 命令传递它。这样做有一个主要的原因是不起作用。需要明确告诉它将命令传递给它正在处理的 nodeJS 进程。

--node-args= 允许你在使用 PM2 时传递典型的 NodeJS 命令。这里有两种传递它的方法。第一种是通过直接的 package.json 文件脚本(为其他人留在这里以防万一):

{
"start:prod": "pm2 start server.js --node-args='--max-old-space-size=200'"
}

或者如上面的评论者所述,通过pm2配置文件:

{"node_args": ["--max-old-space-size=200"]}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接