Web Artisan Blog - ウェブ アルチザン ブログ

Rails:mongrel_cluster環境で運用中、数時間後にProxy Errorが発生する件

Ruby・Rails (4 items)

2007年10月18日

Research Artisan Pro ←リサーチアルチザンがパワーアップして復活しました!!
Railsで作成したリサーチアルチザンのコミュニティ機能ですが、リバースプロキシ(apache)→ mongrel_clusterな環境でサーバー構築してます。
しかし、これで実際運用すると、数時間後には中々応答が返って来なくなり、apacheがProxy Errorを返す現象が必ず発生していました。

で、色々ググって調べていくと、最初は以下の記事に辿り着いて、
Rails + MySQL (+ Mongrel?) でDB接続の通信が無い状態が続くとデッドロックする。
MongrelのFAQの通りに、「ActiveRecord::Base.verification_timeout」の値を変えたりしてみましたが、上記記事にもあるように現象が改善されませんでした。。

運用におけるmongrelに関する情報が中々少ないので困ってましたが、以下の記事がヒントになりました。
Buku nota aku | railsのsession files

・・セッションファイル。


セッション管理は、デフォルトのファイルベースであるPStoreを使ってました。
Railsはセッションの自動削除機能がないので、cronで消したりはしてましたが、それでも確かにtmp/sessionsディレクトリ配下には大量のセッションファイルが溜まってました。ディスクIOは怪しい。。

で、まずセッション管理をDBを使用にしてみようと思ったんですが、この環境ではMySQLのレプリケーションを使ってるんで、それを考慮するのも中々難しく、結果memcachedを使用するようにしてみました。
参考にしたのは以下のサイト。
HowtoChangeSessionStore
railsのセッション管理でmemcachedを利用
導入は上記サイトの通りで簡単、ロジックの修正はsessionにオブジェクトを突っ込んでいた部分が若干あったのを修正したくらいです。

すると、現象は解消。動作も若干速くなりました。

RubyOnRails を使ってみる 【第 10 回】 パフォーマンスチューニング
実はこのように、フレームワークの処理におけるセッションの処理は、非常に重い処理のひとつです。


上記にも書かれてる通り、セッション処理を考慮することで、Railsのパフォーマンスも上げれそうです。

ただ、セッションもmemcachedに入れること自体、あまり適していないという意見もあり、かなり色々考えましたが、当面はこの方法で運用していきます。。
Why storing session on memcached?
前の記事 次の記事

Comments

コメントは、まだ書かれていません

Add Comments

Trackback

トラックバックはありません

Trackback URL

http://www.res-system.com/weblog/action.php?action=plugin&name=TrackBack&tb_id=627