herokuでMemory Quota Exceededと言うのが出るようになったので、puma_worker_killerを入れた話

最近、herokuで稼働させているRailsのアプリが「Memory Quota Exceeded」と言われる事が多くなり、定期的にワーカーの再起動をしたいと思ってました。

memory_quota_exceeded

見る限り、swapも出てしまい、レスポンスも遅くなっているようです。

このような場合、heroku以外だと、unicornを使うので、unicorn_worker_killerを入れるのですが

herokuだとpuma推薦なのでpuma使っていました。

で、pumaもuniconのようにworker killer系の物があるのかな?と探してたところ

puma_worker_killerがあるようなので、使ってみました。

https://github.com/schneems/puma_worker_killer

herokuでの使い方は、「Turn on Rolling Restarts」というのを使うのが推薦のようなので

その設定で行ってみました。

デフォルトだと6時間ごとに再起動ということになるので、ひとまず様子見で3時間に設定してみます。

以下が、3時間でリスタートがかかるようにした設定になります。

こちらを設定したところ

memory_quota_exceeded_after_config

ピーク時は少しswapが出る時もあるものの、割と落ち着いたのかなと思います。

しばらくはこの状態で様子見をし、アラートがまた増えるような感じであれば再度調整という事にしようと思います。

rvmを使った環境で、unicornをcrontabなどに登録する時の手順

rvmを使って実行環境を分けつつ、crontabなどで自動起動をさせたい時

まずはrvmでラッパーを作成する

これを実行すると、~/.rvm/binにstart_unicorn_railsというファイルが出来上がる

このファイルに対してunicorn_railsに指定するパラメータを指定してやると

rvmを読み込んだ状態でunicorn_railsを実行してくれる。

Ubuntu 13 and Ruby on Rails 4 で、capybara-webkitを使ってcucumberでテスト

必要なパッケージをインストールする

たぶん、このインストールだけで済むはず。

入れている物は、
libqtwebkit-dev
qtwebkitの開発用モジュール
Qtはデスクトップと組込み開発向けのクロスプラットフォームアプリケーション開発フレームワーク
らしい
xvfb
仮想フレームバッファ
ttf-kochi-mincho-naga10 ttf-kochi-gothic-naga10
日本語フォント

済まなかったら以下を追加

Gemfileにgem追加

bundle実行

インストール完了

続いて、実行です。

lib/tasks/cucumber.rakeファイルが出来ているので、開く

test:prepare

というタスクがあるので、この中に以下の様にheadless起動の処理を書く

以上で、cucumberの設定は完了

続いて、サンプル的に。

Googleのトップページへアクセスして、スクリーンショットを撮って終了するという処理を書いてみます。

features/step_definitions/steps.rb

というファイルを作成します。

この中身は以下の様にします。

続いて、

/features/example.feature

というファイルを作成します。

中身は以下の様に。

最後に、cucumberを実行します。

これで、www.google.co.jpのキャプチャが取得出来ましたでしょうか?