Ruby on Rails開発のインターン (Day 10)
こんにちは、皆さん!
今日はまだ何をやるのかよくわからないが、思い当たる限り、メモリ使用量を落とすことかな。
- トピック:
- 疑問:
- 問題:
- 学習した内容:
- 普通の画像を
svg
のようなベクター形式の画像に変えることでメモリ使用量を減らすことができる
- 今後やりたいこと:
- リソース:
- Rails: メモリ使用量を制限してHerokuのR14エラー修正&費用を節約した話(翻訳)
- TuneMyGC - optimal MRI Ruby 2.1+ Garbage Collection tuning
一つ一つの
gem
のメモリ使用量の確認方法
上級者になってくると、メモリの管理もし始める。その時にとても役に立つと個人的には思う。
やり方はシンプルで、以下のジェムを
Gemfile
に追加する。
gem 'derailed_benchmarks', group: :development
で、下記のコマンドを実行する。
$ bundle exec derailed bundle:mem
僕の場合はそんなに多くのメモリを使用しているものはなかったけど、リソースの記事を書いた人は合計で100MBものメモリを節約できたのでGemfile
をあまり軽視しないように(笑)
GC チューニングでガベージコレクションを加速させる
ガベージコレクションをより多くさせる方法があって、メモリにかかわる環境変数を変更することで達成できる。この方法をGC チューニングという。
***必要でないのなら絶対にしないこと!!ガベージコレクションをしている間はアプリケーションを止めるのでより頻繁なガベージコレクションはアプリケーションの使いやすさに悪影響を与えるかも***
一番よくつかわれるのは下記の環境変数の変更。
RUBY_GC_HEAP_GROWTH_FACTOR
デフォルトで1.8の値が与えられているこの変数はヒープのサイズが元の1.8倍になったらガベージコレクションを始めるという意味で設定されている。もうわかった人もいると思うけど、この値を小さくすることで理論的にガベージコレクションを開始するのがより早くなるのだ。
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でやろうとするとエラーが発生する。これじゃあ、実際にウェブ上にプログラムをアップロードした際にどうなるのかわからない。明日はがんばってここを何とかしようと思う。
ご精読ありがとうございました。では、また次回まで✌