Home > Ruby on Rails > mod_rails(passenger)はmogrelの3倍メモリを食う?

mod_rails(passenger)はmogrelの3倍メモリを食う?

 Rails運用時で気になるのは、安定性とパフォーマンス。安定性はいろいろ負荷テストをして時間が経たないと分からないので、まずはメモリのパフォーマンスから調べてみます。

 とりあえず、ちょっとしたサンプルをmongrelで動かしてみると、44Mほどメモリを確保しています。

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
1003     14412  0.0  2.2  44316 23556 ?        Sl   Apr10   0:01 /usr/bin/ruby1.8 /var/lib/gems/1.8/bin/mongrel_rails start

 んで、同じプロセスをmod_rails(passenger)で起動すると、143Mほど確保されます。

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     23423  0.0  0.5  21720  9172 ?        Sl   06:24   0:00 Passenger spawn server
root     25426  9.0  1.2  34796 20944 ?        S    17:01   0:00 Passenger FrameworkSpawner: 2.0.2
1000     25427  4.1  1.2  43204 22560 ?        S    17:01   0:00 Passenger ApplicationSpawner: /u/app/test/releases/20080413134312
1000     25429  0.3  1.2  43288 22316 ?        S    17:01   0:00 Rails: /u/app/test/releases/20080413134312

 まだ詳しく追ってないんですが、”Passenger spawn server”は、Apache起動時に同時に起動されるプロセスで、Apache稼働中は常駐しています。これは稼働しているアプリの数に関わらず1個です。

 Railsアプリがインストールされているアドレスにアクセスすると、Railsアプリのプロセスが起動されます。
“FrameworkSpawner”がgemにインストールされたRails本体です。これは同じバージョンのRailsを使っていれば、複数プロセスで共有されます。
 ”ApplicationSpawner”と”Rails”が、プログラム本体です。想像ですが、”ApplicationSpawner”は待機中のプロセスで、”Rails”が稼働中のプロセスの様です。負荷が増えた場合は、”ApplicationSpawner”をcloneして起動するんじゃないかと思います。

 そして、一定時間(RailsPoolIdleTimeで指定した値、デフォルトで120秒)、アプリへのアクセスがないと、”ApplicationSpawner”と”Rails”は終了させられます。少し遅れて”FrameworkSpawner”も終了される様です。終了しないかも。

 なので、一つのサーバでさほどアクセスのないアプリを多数上げる場合には、mod_railsが向いているようです。1つのサーバで複数のアプリは上げない、メモリを余計に食いたくないというときは、mongrelの方が良いかもしれません。

 ただ今のマシンはメモリが多いので、この程度は気にしなくても良いかもしれませんが。

Related posts

masuidrive(増井 雄一郎)
PukiWikiなどのオープンソース活動を経て、2005年からRuby on Railsに的を絞り、WEB2.0社 PingKingやニフティ アバウトミーの開発に関わる。これまでのフリー活動から転身し、2007年は1年だけ会社員として働いた後、起業のため渡米。2008年4月にBig Canvas Inc.設立。現在、米ベルビュー在住。

Comments:4

NOV 08-04-14 (Mon) 1:38

RailsPoolIdleTimeを5秒にして試してみました。
RailsはRailsPoolIdleTimeを過ぎると終了しますが、ApplicationSpawnerはRailsPoolIdleTime終了後もしばらくは残っているようです。(数分すると消えていました)
FrameworkSpawnerは、そのときも残ってました。

masuidrive 08-04-14 (Mon) 1:43

FrameworkSpawnerは消えないみたいですね。
沢山のフレームワークのバージョンを使ってても消えないのかなぁ。

ay 08-04-15 (Tue) 8:27

framwork spawn serverはFRAMEWORK_SPAWNER_MAX_IDLE_TIMEで、application spawn serverはAPP_SPAWNER_MAX_IDLE_TIMEに従って消えたりしないですか?

masuidrive 08-04-15 (Tue) 16:54

あ、そうなんですね。
もうちょっと調べてみます。まだ全然ソースも読んでなくて。

Comment Form
Remember personal info

Trackbacks:1

Trackback URL for this entry
http://blog.masuidrive.jp/index.php/2008/04/14/mod_rails_uses_triple_memory_than_mongrel/trackback/
Listed below are links to weblogs that reference
mod_rails(passenger)はmogrelの3倍メモリを食う? from @masuidrive blog
trackback from /var/log/maeda.log 08-04-14 (Mon) 8:04

Passengerのメモリ消費…

masuidrive on rails – mod_rails(passenger)はmogrelの3倍メモリを食う?: http://blog.masuidrive.jp/index.php/2008/04/14/mod_rails_uses_triple_memory_than_mongrel/ とりあえず、ちょっとしたサンプルをmongrelで動かしてみる…

Home > Ruby on Rails > mod_rails(passenger)はmogrelの3倍メモリを食う?

Search
Feeds
Meta

Return to page top