Ruby on Rails開発のインターン (Day 10)

こんにちは、皆さん!

今日はまだ何をやるのかよくわからないが、思い当たる限り、メモリ使用量を落とすことかな。


  • トピック:
  1. 一つ一つのgemのメモリ使用量の確認方法
  2. GC チューニングでガベージコレクションを加速させる
  3. GCチューニングのセットアップ
  4. GCチューニングの実行


  • 疑問:


  • 問題:


  • 学習した内容:
  1. 普通の画像をsvgのようなベクター形式の画像に変えることでメモリ使用量を減らすことができる


  • 今後やりたいこと:


  • リソース:
  1. Rails: メモリ使用量を制限してHerokuのR14エラー修正&費用を節約した話(翻訳)
  2. TuneMyGC - optimal MRI Ruby 2.1+ Garbage Collection tuning


一つ一つのgemのメモリ使用量の確認方法

リソース:Rails: メモリ使用量を制限してHerokuのR14エラー修正&費用を節約した話(翻訳)


上級者になってくると、メモリの管理もし始める。その時にとても役に立つと個人的には思う。
やり方はシンプルで、以下のジェムをGemfileに追加する。

gem 'derailed_benchmarks', group: :development

で、下記のコマンドを実行する。

$ bundle exec derailed bundle:mem

僕の場合はそんなに多くのメモリを使用しているものはなかったけど、リソースの記事を書いた人は合計で100MBものメモリを節約できたのでGemfileをあまり軽視しないように(笑)

GC チューニングでガベージコレクションを加速させる

リソース: TuneMyGC - optimal MRI Ruby 2.1+ Garbage Collection tuning


ガベージコレクションをより多くさせる方法があって、メモリにかかわる環境変数を変更することで達成できる。この方法をGC チューニングという。
***必要でないのなら絶対にしないこと!!ガベージコレクションをしている間はアプリケーションを止めるのでより頻繁なガベージコレクションはアプリケーションの使いやすさに悪影響を与えるかも***


一番よくつかわれるのは下記の環境変数の変更。

RUBY_GC_HEAP_GROWTH_FACTOR

デフォルトで1.8の値が与えられているこの変数はヒープのサイズが元の1.8倍になったらガベージコレクションを始めるという意味で設定されている。もうわかった人もいると思うけど、この値を小さくすることで理論的にガベージコレクションを開始するのがより早くなるのだ。

GCチューニングのセットアップ

GCチューニングを使うためにはまず、下記のようにジェムをGemfileに追加。

gem 'tunemygc'

それで、bundle installした後、次のコマンドでトークンを手に入れる。

$ bundle exec tunemygc -r email@yourdomain.com

おそらく次のようにトークンが表示されるはず。

Application registered. Use RUBY_GC_TOKEN=08de9e8822c847244b31290cedfc1d51 in your environment.


GCチューニングの実行

そして、ようやく最後に環境変数をセットしてプログラムを実行するとき。
次のように、自分のトークンと環境変数を入れて、実行スタート!

$ RUBY_GC_TOKEN=08de9e8822c847244b31290cedfc1d51 RUBY_GC_TUNE=200 RUBY_GC_HEAP_GROWTH_FACTOR=1.1 bundle exec rails s

3番目の変数が先ほど出てきたもので、ガベージコレクションをもっと頻繁に実行させる。
そして、この変数の値を自由に変えて他の設定で実行することももちろんできる。

まとめ

メモリ使用量がある段階まで来た時にそれ以上は全然多くならないのを見てすっごい喜んだ。ついにメモリ使用量に関する問題に対抗する手段を見つけた!!
だが、残念なことにHerokuでやろうとするとエラーが発生する。これじゃあ、実際にウェブ上にプログラムをアップロードした際にどうなるのかわからない。明日はがんばってここを何とかしようと思う。


ご精読ありがとうございました。では、また次回まで✌



Day 11はこちら↓↓
programming-shop.hatenablog.com


Day 9はこちら↓↓
programming-shop.hatenablog.com