4GBスワップでリビルド中にメモリ不足?

本日、いくつかの2コンテナブートストラップが、以下のようなエラーで失敗しました。

 ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL  コマンドはSIGKILL(強制終了)でキルされました: ember build -prod"]

スワップを追加して次回試行したところ、動作したと思います。しかし、これには4GBのスワップがあります。

# free -h
               total        used        free      shared  buff/cache   available
Mem:           1.9Gi       1.1Gi       391Mi        45Mi       661Mi       830Mi
Swap:          4.0Gi       3.1Gi       911Mi

それでも失敗しています。そして、ブートストラップの前にコンテナを停止すると、成功します。

「いいね!」 1

ビルドはプリビルドされたアセットを取得/使用していますか?それともそれを無効にしましたか?(または、プリビルドされたアセットが使用できないようにコアをパッチしましたか?)

「いいね!」 2

スワップ領域はたくさんありますが、その多くがすでに使用されています。2コンテナ構成の方がダウンタイムが少ないため、サーバーの現在の起動がまだ実行中で、おそらくリークによって多くのメモリが消費されている可能性があります。

更新の前に再起動すると良いかもしれません。再起動の前後にスワップの使用量を測定してみてください。

「いいね!」 3

私のサーバーのいずれかで、メモリリークかメモリの肥大化のような問題が発生しています。@RGJさんの賢明な提案により、毎週月曜日の早朝(西ヨーロッパ時間)に7日ごとの再起動をcronスケジュールしています。

(問題のあるプラグインは特定できていると考えていますが、なぜメモリリーク/肥大化が発生しているのかを突き止めるための時間を費やしていません。)

「いいね!」 2

これはOOMキル(Out Of Memory Kill)のようです。私は約2GiBのRAMを使用しており、2コンテナの再構築では古いアプリと新しいビルドが重複し、メモリが限界を超えてしまいます。ブートストラップ前にスワップがすでに約3GiB使用されているため、EmberビルドのスパイクがSIGKILLされます。実行中のコンテナを停止する(または1コンテナでの再構築を行う)と、重複が回避され成功します。次のステップはdmesgで確認し、その後、再構築前に再起動する/時間とともにスワップを増加させている原因を調査する/RAMを追加する(スワップがすでに多く使用されている場合、スワップだけでは救えないようです)のいずれかを行うことです。

「いいね!」 1

これは pnpm や Ember の問題というより、ホストが単にメモリ不足になったように見えます。

重要な詳細は SIGKILL です。これは通常、OS が介入してプロセスを強制終了させた(多くの場合、OOM killer によって)ことを意味し、ember build -prod が単独で失敗したわけではありません。

小規模なホストでは、Ember の本番ビルドは簡単に数GBのRAMを消費することがあります。スワップが有効になっていても、スワップがほとんど使用されると、カーネルはメモリを大量に消費する node プロセスを強制終了させる可能性があります。

この方向性を示すいくつかの点があります。

  • 障害が発生した時点でスワップがすでに多用されている。
  • 別のコンテナが同時に実行されている場合に障害が発生する可能性が高い。
  • ブートストラップを実行する前に別のコンテナを停止すると、全く同じビルドが成功する。

したがって、スワップは多少役立ちますが、主に問題の発生を遅らせるだけです。別のコンテナを停止すると、ビルドが完了するのに十分なメモリ圧力が緩和されます。

役立った点/役立つ可能性のある点:

  • 複数のブートストラップやアセットビルドを並行して実行することを避ける。
  • ember build -prod の実行中に別のコンテナを停止する。
  • Node のメモリ使用量を制限する(例:NODE_OPTIONS=--max_old_space_size=1024)ことで、ピーク使用量を削減する。
  • 可能であれば、ホストの RAM を増やす(4GB以上)と、これがはるかに信頼性が高くなります。

これが、問題が少しランダムに感じられる理由や、別のコンテナを停止すると動作するようになる理由を説明するのに役立つことを願っています。

「いいね!」 2

より多くのスワップがあれば役立つように感じます。害はありません。合計スワップを見て、それが多すぎると言う代わりに、空きスワップを見て、再構築のためのヘッドルームがあることを確認してください。

「いいね!」 2

また、オーバーコミットが有効になっていることを確認してください。

良い考えですね!サーバーを再起動しますか、それともコンテナだけを再起動しますか?

とにかく、別の2GB+3GBのサーバーでも再び発生しました。その後、web_onlyを再起動してもう一度試したところ、問題なく動作しました。メモリが「低い」と定義される場合、web_onlyを再起動するツールを自分のツールに追加するつもりです。

皆さんのアイデアに感謝します!

「いいね!」 1

サーバー全体です😅

「いいね!」 2

お願いだからWindowsじゃないんだって :rofl:

「いいね!」 2

ああ、あの頃を思い出すよ!:grimacing:

「いいね!」 2

Linuxを再起動することで解決したケースが1件ありました。通常、Linuxに対してこのように考えるのは好ましくありませんが、断片化の可能性やメモリリークの可能性は依然として存在します。

「いいね!」 2