事象
追加調査してわかった事象
- 過去、バッチ実行中、一瞬(1分弱?)だけRubyのプロセスがそれまで使用していたメモリ使用率2倍をマークしてすぐに落ち着く
Fork()の疑い
- Ruby には Fork()関数が実装
-
- 今のプロセスを保有しているメモリごと複製して新プロセスを作成する
- すぐに別処理に移った場合、該当のメモリはすぐに開放
OSのベースが 10%ほどメモリ占有 + もとのプロセスが50%占有 のところに、さらにプロセス複製で50%を確保しようとしたら不足で落ちた可能性
Railsなどの大御所はもちろん、マルチプロセスの常套手段として利用されている。
対策
- マシンをスケールインする
- プロセスのメモリ所要量を低減する