🔖

EC2のメモリ空き容量が減る場合の対処法

2021/11/27に公開

困っている事

  • 本番に公開しているAWSが、3日おきぐらいに再起動する
  • なぜ本番が3日おきに再起動するのか分からない

環境

  • auto scaling使用
  • ロードバランサ使用
  • rails(6.1)
  • 起動はpuma
  • EC2プラン: t2.micro

前提情報

  • ログに、OOMキラーが作動したという記述あり。その後EC2インスタンスが落ちている
  • /etc/sysctl.confで、OOMキラーが作動した時に、EC2インスタンスが再起動するように設定している
  • EC2インスタンスが再起動したタイミングでnginxとpumaが起動するcrontabを設定している
  • EC2インスタンスは再起動するとメモリがリセットされる
  • 約3日後にOOMキラーが作動する、の繰り返し
  • サイトは1日に5000人ほどのuserが登録するというアプリ

予想

  • メモリリーク
  • メモリブロート(メモリ断片化)
  • のどちらかではないか

検証

  • メモリリークの特徴: メモリ消費量が徐々に線形に増加

  • メモリ断片化の特徴: メモリ消費量が一定まで増加すると横ばいになっていく

  • まずメモリの消費量推移を監視する必要あり

  • cloud watchでメモリ消費量を監視する設定を行う

gem

  • puma worker killerというgemが有名だが
  • READMEを読む限り使わない方がいいように見えるので使わない

対策

  • 検証の結果、リークか断片化かはっきりとは分からなかった(微妙なグラフ)
  • プランがt2.microなのでメモリが少なすぎるのでは
  • t3.smallにした所、それ以後は一度も再起動しなくなったので、断片化が原因だったのではないか

その他

  • よく使ったコマンド $ free -m(メモリ使用量が分かる)

Discussion