TL;DR : spawn ENOMEM
Next.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 アプリの要件を満たしていないという理由だけでしょうか?
間違った設定を適用したのか、いくつかの重要な設定を見落としたのか、このエラーを引き起こすコードを書き間違えたのかはわかりません。その下で何が起こっているのかを知りたい。十分な理解がないまま衝動的に計画をアップグレードするのは、初心者の開発者である私にとって良くありません。予算を有効に活用するのは私の責任です。
アドバイスをお願いできますか?
ご清聴ありがとうございました。