ピックアップ
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対応
上記エラーの中で、
https://github.com/browserslist/update-db#readme
のなかで、
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)
でうまくいったので、完了。
おすすめ書籍
コメント一覧
コメントはまだありません。
コメントを残す