WebサーバにGCのレスポンス性能は関係あるか

Rubyは今,StopTheWorldなGCを使用している.

StopTheWorldと言えば「グッ」と固まるである.

 

「グッ」と固まってもらっては絶対に困るアプリケーションの種類.

また,「グッ」と固まると性能的にNGであるアプリケーションは以下のようなものが考えられる.

  • ロボットや携帯などの制御系アプリケーション
  • ゲームなどのリアルタイム性を非常に重視しているアプリケーション

 

さて,問題はWebアプリケーションである.

Webアプリケーションと上記に並べたようなアプリケーションを比べると,

レスポンス性能はさほど必要ないように感じる.

 

だが,非常に大きなメモリ領域を使う(たくさんのオブジェクトを使う)場合,

あるリクエストがGCによって全然帰ってこないという可能性がある.

それがもし,ネットバンクの振り込みの様な大事なリクエストの場合,一大事になるだろう.

(まぁ確率は低いけど,致命的なシーンもあるという事で)

 

ただ,

「Webアプリケーションは色々な技術がふんだんに使われており,その他の要因が原因である事が多い.」

という事があり,RubyGCの問題は顕在化してこない事が多いと思う.

それよりも拡張ライブラリで負荷かけたらSEGVしたとかが多いか.

 

しかし,誤解しないで欲しいのはStopTheWorldの問題がないわけでは無い.

今はそんな問題は頻繁に出てきていないが,のちのち出てくる...かもしれない.

 

そのときは,みんな「GCの野郎がまたやりやがったよ!」とすごく怒るだろう.

「今まで,いっぱい解放してあげたじゃない!忘れたの?」とGC

ちょっとかわいそう.

 

とにかく.

 

考えたのは,スループット性能は少し落ちてもいいから,レスポンス性能をあげた方がいい場面が多いんじゃないという事.

 

などという事を2時くらいまでhikaryと熱論していた.

GCって本当におもしろい.何でこんなおもしろいのかと考えたが,よく分からない.

地味だし,非常に思い通りにならない事が多い.

あ,だからおもしろいのか?

んん.