Passengerとunicornのメモリ使用量の違いとパフォーマンスの違い

別々のポートで同じ2ワーカーで立ちあげてみました。
面白いので、比較してみます。

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
1001      1907  1.1  9.4 262384 47308 ?        Sl   04:54   0:07 Passenger ApplicationSpawner: /xxx                   
1001      1913  0.4 10.3 269452 52096 ?        Sl   04:54   0:02 Rack: /xxx
1001      2381  0.7  9.8 267028 49308 ?        Sl   05:02   0:01 Rack: /xxx
1001      2434  6.4 10.1 199440 50796 ?        Sl   05:03   0:06 unicorn_rails master -c config/unicorn.conf -D
1001      2484  0.3  9.5 199836 47984 ?        Sl   05:03   0:00 unicorn_rails worker[0] -c config/unicorn.conf -D
1001      2487  0.3  9.5 199836 47984 ?        Sl   05:03   0:00 unicorn_rails worker[1] -c config/unicorn.conf -D

該当部分のみを表示してみました。
これで見てみると、、
RSS(使っている物理メモリ)は

  • passengerが148,712kb
  • unicornが146,764kb

とあまり変わりません。
でも、仮想メモリを含めると、

  • passengerが798,864kb
  • unicornが599,112kb

と圧勝でした。さて、ベンチマークとってみましょうか。
Passengerは、

Requests per second:    8.72 [#/sec] (mean)

こんくらい。
unicornだと、

Requests per second:    2.05 [#/sec] (mean)

全然だめじゃん。
もしかして、Workerが少ない場合はPassengerの圧勝かも。
ワーカーを8に増やしてみて、

Requests per second:    7.31 [#/sec] (mean)

ってな感じになりましたが、
passengerの2ワーカーの記録 8.72 に勝てません。
passengerの方がCPUを使いこなす効率がよくて、
ワーカーが少ない場合はpassengerが圧勝でした。
メモリをジャブジャブ使えてCPUが非力な場合は
unicornもいいのかもしれません。

まとめ

unicornはメモリ食わないというけれど、リクエストも食わない。