Closed17
Railsのメモリ使用量確認
サーバーでメモリリークをしている可能性があるので、調査する。
サーバー上でリークしてるメモリがわかればいいんだけど、
とりあえずばローカルで怪しそうな処理を走らせて、その前後でメモリリークしてるか調べる。
ObjectSpace.memsize_of_all
で確認できるけど
あ、本番サーバーでこれ見ればいいのか?
free -tm
定期的に走らせて使用メモリを見てみる
2021-05-24 22:34時点
2021-05-24 23:45時点
プロセスごとに見たいときはpsコマンドを使うといいみたい。
ps aux --sort -%mem | head
a->端末操作のプロセスを表示する。
u->CPUやメモリの使用率なども表示する。
x->現在、実行しているプロセスを表示する
mem行でソート
headは出力から10行表示
2021-05-24 23:59時点
プロセスごとのメモリ使用量
この時点でpumaがトップなのでやはりpuma周りが怪しそう、、
2021-05-25 1:58 時点
増えてってる希ガス
2021-05-25 13:11 時点
増えていってる確実に
というわけでpuma_worker_killer導入するか〜
開発環境に入れてみた
設定はデフォルトのままで
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環境で確認できたので早速本番環境でやってみる。
参考:
jemallocを有効にして再度デプロイした。
これでしばらく様子見
- そもそも5分ごとに実行しているバッチが重かった
- その処理を重複して実行しないようにしているつもりが出来てなかった
という2点を修正したら爆速になったのでもう閉じます
このスクラップは2021/10/20にクローズされました