Closed17

Railsのメモリ使用量確認

sukedonsukedon

サーバーでメモリリークをしている可能性があるので、調査する。
サーバー上でリークしてるメモリがわかればいいんだけど、
とりあえずばローカルで怪しそうな処理を走らせて、その前後でメモリリークしてるか調べる。

sukedonsukedon
free -tm

定期的に走らせて使用メモリを見てみる

sukedonsukedon


2021-05-24 23:59時点
プロセスごとのメモリ使用量
この時点でpumaがトップなのでやはりpuma周りが怪しそう、、

sukedonsukedon

開発環境に入れてみた
設定はデフォルトのままで

before_fork do
  PumaWorkerKiller.config do |config|
    # 閾値を超えた場合にkillする
    config.ram           = 1024 # mb
    config.frequency     = 5 * 60 # per 5minute
    config.percent_usage = 0.9 # 90%
    # 閾値を超えたかどうかに関わらず定期的にkillする
    config.rolling_restart_frequency = 24 * 3600 # per 1day
    # workerをkillしたことをログに残す
    config.reaper_status_logs = true
  end
  PumaWorkerKiller.start
  ActiveRecord::Base.connection_pool.disconnect! if defined?(ActiveRecord)
end
on_worker_boot do
  ActiveRecord::Base.establish_connection if defined?(ActiveRecord)
end

数日走らせてみて、ちゃんと再起動されてるか確認する?
問題なさそうだったら本番に反映させる。

いや、とりあえずrolling_restart_frequencyを数分とかにして再起動されるか確認すればいいか。

sukedonsukedon

Amazon Linux 2上にjemallocを導入する

sudo amazon-linux-extras install -y epel
sudo yum install -y jemalloc-devel
// インストール
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 2.6.6

rbenv rehash
rbenv global 2.6.6

//導入されてるかチェック -ljemalloc が表示されていればOK
ruby -r rbconfig -e "puts RbConfig::CONFIG['MAINLIBS']"

これだけで改善されるらしいんだが本当だろうか。
stg環境で確認できたので早速本番環境でやってみる。

参考:
https://matthewlein.com/articles/install-jemalloc-elastic-beanstalk
https://dev.classmethod.jp/articles/how-to-work-with-amazon-linux2-amazon-linux-extras/
https://www.petitmonte.com/ruby/jemalloc.html

sukedonsukedon


jemallocを有効にして再度デプロイした。
これでしばらく様子見

sukedonsukedon
  • そもそも5分ごとに実行しているバッチが重かった
  • その処理を重複して実行しないようにしているつもりが出来てなかった

という2点を修正したら爆速になったのでもう閉じます

このスクラップは2021/10/20にクローズされました