TL;DR:spawn ENOMEM
当我尝试在共享托管服务器上构建和运行我的 Next.js 应用程序时遇到错误,该服务器在发生这种情况时有超过 900MB 的 RAM 和 70 多个可用进程。日志显示捕获错误时的 RSS 大小为 50814976。
我不太确定该错误是仅由内存不足引起还是由于设置或配置不正确而发生。你能给我一些建议吗?
==========详情如下=============
我正在使用 Node.js 构建 Next.js 应用程序,它是使用自定义服务器构建的(我的入口点:server.js)。我可以在 localhost:3000 的本地环境中运行我的应用程序。然后我尝试部署它以检查它在网络上是否正常。
我已订阅A2 Hosting 的 DRIVE Web Shared Hosting Plan,该计划经过优化以支持 Node.js 环境。他们在计划中提供的是 1GB 的物理内存和 75 个可用进程。
我的应用程序是通过 cPanel 上的Setup Node.js App功能创建的,并通过 SSH 使用 git 将我的项目克隆到服务器中。NPM 包也使用命令安装在服务器上npm install
。节点版本是v.12.9.1
,npm 版本是6.14.8
.
我的 npm 脚本被定义为运行自定义服务器。这是我的package.json文件中定义的 npm 脚本:
"scripts": {
"dev": "node server.js"
"build": "next build",
"start": "NODE_ENV=production node server.js"
}
然后我使用命令npm run build
在.next文件夹中创建生产应用程序,但立即出现错误spawn ENOMEM
。
我用谷歌搜索这是一个与内存使用相关的问题。有人说内存不足时会出现这个错误,绕过这个问题的解决方法是在本地构建生产文件夹并将其上传到服务器。所以我复制了步骤。
但是,当我运行命令时,结果令人沮丧npm run start
。错误ENOMEM
仍然存在,在我输入命令后不到一秒钟就出现了。
清理 npm 缓存并重新安装 npm 模块似乎也不起作用。
我尝试通过在命令中添加选项来增加内存限制--max-old-space-size
并运行NODE_ENV=production node --max-old-space-size=1024 server.js
;但不幸的是,这似乎不起作用,ENOMEM
仍然弹出。
我添加console.log(process.memoryUsage())
以显示捕获错误时的用法,结果如下:
{
rss: 50814976,
heapTotal: 34107392,
heapUsed: 23076064,
external: 1632450
}
总的 rss 大小远远小于限制。还是我使用了错误的方法来检查内存消耗?
我该如何解决这个ENOMEM
问题?错误究竟是由什么引起的?真的只是因为可用 RAM 不符合 next.js 应用程序的要求吗?
我不确定我是否应用了不正确的设置,忽略了一些重要的配置,或者写错了导致此错误的任何代码。我想弄清楚下面发生了什么。在没有充分理解的情况下冲动地升级计划对我这个新手开发者来说是不利的,而善用预算是我的责任。
你能给我一些建议吗?
感谢您的关注。