微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在共享托管服务器上启动 Next.js 应用程序时出现 ENOMEM 错误

如何解决在共享托管服务器上启动 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
}

RSS 总大小远远小于限制。还是我检查内存消耗的方法有误?

如何解决 ENOMEM 问题?错误究竟是由什么引起的?真的只是因为可用内存不满足next.js应用的要求吗?

我不确定我是否应用了错误的设置,是否忽略了一些重要的配置,或者是否写错了导致此错误的任何代码。我想弄清楚下面发生了什么。没有足够的理解就冲动地升级计划对我这个新手开发者来说是不利的,我有责任好好利用预算。

你能给我一些建议吗?

感谢您的关注。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?