Closed17

Railsのメモリ使用量確認

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

free -tm

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


2021-05-24 22:34時点


2021-05-24 23:45時点


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


2021-05-25 1:58 時点
増えてってる希ガス


2021-05-25 13:11 時点
増えていってる確実に

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

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を数分とかにして再起動されるか確認すればいいか。

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


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

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

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

このスクラップは3ヶ月前にクローズされました
ログインするとコメントできます