ピックアップ

Nextjsでのbuildで「Creating an optimized production build …Killed」が発生した件のメモ。

Nextjsでプロジェクト作成して、

本番環境でビルドするときに、

Creating an optimized production build …Killed

が起きたので、

その時の内容などを、

個人用にメモをしておく。

完全な個人用の断片メモ。

エラーの事象と状況

エラーについては、

  • 開発環境でのビルドではエラーが発生しない
  • 本番環境でのビルドではエラーが発生する

という状況。

内容としては、

info  - Need to disable some ESLint rules? 
Learn more here: https://nextjs.org/docs/basic-features/eslint#disabling-rules
info  - Linting and checking validity of types
Browserslist: browsers data (caniuse-lite) is 9 months old. Please run:
  npx update-browserslist-db@latest
  Why you should do it regularly: https://github.com/browserslist/update-db#readme
info  - Creating an optimized production build ...Killed

というエラー。

試したこと1:npx対応

上記エラーの中で、

のなかで、

npx update-browserslist-db@latest

を実行。

こちらだけでは解決せず。

メモリ不足

本番環境の管理画面での各種使用率を確認してみたら、

CPU挙動が不安定になっているタイミングで、

メモリ使用率がかなり高くなり、

100%近くなっていた。

そのため、

ビルド時のメモリ使用上限を決めて、

そちらで対応することを試みた。

実行コマンドはこちら

node --max-old-space-size=1024 node_modules/.bin/next build

上記実行で、

info  - Need to disable some ESLint rules? Learn more here: https://nextjs.org/docs/basic-features/eslint#disabling-rules
info  - Linting and checking validity of types
info  - Creating an optimized production build
info  - Compiled successfully
info  - Collecting page data ..zsh: killed     node --max-old-space-size=1024 node_modules/.bin/next build

うまく途中まではいっている気がする。

自分が使用している環境がミニマム構成なので、

もう少し削ってみる

node --max-old-space-size=512 node_modules/.bin/next build

こちらを実行すると、

info  - Need to disable some ESLint rules? Learn more here: https://nextjs.org/docs/basic-features/eslint#disabling-rules
info  - Linting and checking validity of types
info  - Creating an optimized production build .
<--- Last few GCs --->

[2734995:0x1e2d3380]   122541 ms: Scavenge (reduce) 506.1 (520.3) -> 505.8 (520.8) MB, 5.7 / 0.0 ms  (average mu = 0.321, current mu = 0.414) allocation failure
[2734995:0x1e2d3380]   122923 ms: Mark-sweep (reduce) 506.4 (520.8) -> 500.6 (520.6) MB, 286.3 / 0.0 ms  (+ 578.7 ms in 126 steps since start of marking, biggest step 16.1 ms, walltime since start of marking 1035 ms) (average mu = 0.340, current mu = 0.35

<--- JS stacktrace --->

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 0xb200e0 node::Abort() [node]
 2: 0xa3c157 node::FatalError(char const*, char const*) [node]
 3: 0xd083ae v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [node]
 4: 0xd08727 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [node]
 5: 0xee9785  [node]
 6: 0xeea2cc  [node]
 7: 0xef8269 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [node]
 8: 0xefb5ac v8::internal::Heap::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [node]
 9: 0xec000c v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationType, v8::internal::AllocationOrigin) [node]
10: 0x123695b v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [node]
11: 0x1640839  [node]
zsh: abort (core dumped)  node --max-old-space-size=512 node_modules/.bin/next build

になるので、

そもそも、サイズ小さくしすぎたら、

時間かかって終わるのではなく、

メモリ足りなさすぎて落ちる。

試したこと

メモリ使用率高いの何かを

ps aux --sort=-%mem | head

で調べたら、

php-fpmが高かったので、

リスタートすることで、

不要な確保メモリの解放で、

メモリ使用量が減るかと思って試す。

sudo systemctl restart php8.1-fpm

こちらでメモリ使用量が減った。

この後、

npm run build

をやると、

リミット無いせいか、

またエラーになったので、

node --max-old-space-size=1024 node_modules/.bin/next build

で程よく上限をかけて実行。

info  - Need to disable some ESLint rules? Learn more here: https://nextjs.org/docs/basic-features/eslint#disabling-rules
info  - Linting and checking validity of types
info  - Creating an optimized production build
info  - Compiled successfully
info  - Collecting page data
info  - Generating static pages (9/9)
info  - Finalizing page optimization
 :
λ  (Server)  server-side renders at runtime (uses getInitialProps or getServerSideProps)
○  (Static)  automatically rendered as static HTML (uses no initial props)

でうまくいったので、完了。

ピックアップ

おすすめ書籍

コメント一覧

コメントはまだありません。

コメント送信

コメントを残す

広告

おすすめ記事