2

TL;DR : spawn ENOMEMNext.js アプリをビルドして共有ホスティング サーバーで実行しようとすると、エラーが発生しました。共有ホスティング サーバーには、900 MB を超える RAM と 70 以上のプロセスが利用可能でした。エラーがキャッチされたとき、ログは RSS サイズが 50814976 であることを示しました。

エラーが単にメモリ不足が原因なのか、設定や構成が正しくないために発生したのかはよくわかりません。アドバイスをお願いできますか?

==========詳細は以下============

私は Node.js を使用して Next.js アプリを構築しています。これはカスタム サーバー (私のエントリ ポイント: server.js ) を使用して構築されています。localhost:3000 のローカル環境でアプリを実行できます。次に、ネットワーク上で問題がないかどうかを確認するために展開してみます。

Node.js 環境をサポートするように最適化されたA2 Hosting の DRIVE Web Shared Hosting Planに加入しました。プランで提供されるのは、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"
}

次に、コマンドを使用して.nextnpm run buildフォルダーに本番アプリケーションを作成しましたが、すぐにエラーが発生しました。spawn ENOMEM

私はそれがメモリ使用量に関連する問題であることをグーグルで調べました。メモリが不足しているときにこのエラーが発生したと言う人もいましたが、これを回避するための回避策は、運用フォルダーをローカルに構築してサーバーにアップロードすることでした. というわけで、手順をコピーしました。

ただし、コマンドを実行したときの結果はイライラしましたnpm run start。エラーENOMEMはまだここにあり、コマンドを入力してから 1 秒もかからずに表示されました。

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 アプリの要件を満たしていないという理由だけでしょうか?

間違った設定を適用したのか、いくつかの重要な設定を見落としたのか、このエラーを引き起こすコードを書き間違えたのかはわかりません。その下で何が起こっているのかを知りたい。十分な理解がないまま衝動的に計画をアップグレードするのは、初心者の開発者である私にとって良くありません。予算を有効に活用するのは私の責任です。

アドバイスをお願いできますか?

ご清聴ありがとうございました。

4

0 に答える 0