如何解决在共享托管服务器上启动 Next.js 应用程序时出现 ENOMEM 错误
TL;DR:尝试在共享托管服务器上构建和运行我的 Next.js 应用程序时出现 spawn ENOMEM
错误,该服务器具有超过 900MB 的 RAM 和 70 多个可用进程在这发生的时候。日志显示发现错误时RSS大小为50814976。
我不太确定错误是由内存不足引起的还是由于设置或配置不正确引起的。你能给我一些建议吗?
==========详情如下============
我正在使用 Node.js 构建 Next.js 应用程序,它是使用自定义服务器构建的(我的入口点:server.js)。我可以在 localhost:3000 的本地环境中运行我的应用程序。然后我尝试部署它以检查它在网络上是否正常。
我已订阅 A2 Hosting 的 DRIVE Web 共享托管计划,该计划经过优化以支持 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
}
如何解决 ENOMEM
问题?错误究竟是由什么引起的?真的只是因为可用内存不满足next.js应用的要求吗?
我不确定我是否应用了错误的设置,是否忽略了一些重要的配置,或者是否写错了导致此错误的任何代码。我想弄清楚下面发生了什么。没有足够的理解就冲动地升级计划对我这个新手开发者来说是不利的,我有责任好好利用预算。
你能给我一些建议吗?
感谢您的关注。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。