LoginSignup
4
4

More than 5 years have passed since last update.

thinのマルチスレッドとプロセス数の調整

Last updated at Posted at 2016-02-02

RailsのWebアプリサーバとしてはthinを使っています。thinにしたのはWebsocketRailsが動くととという要件があったからです。

thinにはいくつかのパラメータの調整ができます。大きなところでは、-threadedでマルチスレッド化したり、-serverで起動プロセス数を調整できます。threadedオプションはまだ、Experimentalなのでどんなものなのか、を見てみたいと。

計測

計測はhttp_loadを使いました。次のように実行しています。Nは同時アクセス数。

./http_load  -parallel $N -fetches $N url.txt

ちなみに、UbuntuでCPUは4Core。メモリは8Gぐらいのマシンで計測。

-threadedオプション

まずは、-threadedオプションのある、なしでの計測です。Nは1から100まで。
thin-performance.png

グラフではわかりにくいですが、20ちょっとまではthreadedオプションをつけた方が数%ほどパフォーマンスがいい傾向にあります。しかし、23スレッドを超えたあたりから急激にパフォーナンスが悪化してます。
コンソールには、次のようなエラーが出ています。

ActiveRecord::ConnectionTimeoutError (could not obtain a database connection within 5.000 seconds (waited 5.003 seconds)):

データベースへの同時接続数を増やせば安定すると思いますが、数%のパフォーマンスと引き換えに、APをスケールさせるときに不安を持つのはうれしくないので、threadedオプションは使わないのがよいかと。

-serverオプション

スレッドではなくプロセスの数で調整ってのは*nixではよくある手法ですね。
serverオプションを1, 2, 4で計測したのが次の結果です。
thin-perfomance.png

プロセス数が1から2になると、ほぼ、2倍の性能向上ですね。同時アクセス数に対してもリニアに性能悪化してます。プロセス数を4にすると1から2にしたときほどの効果はないものの1.5倍程度の性能改善です。

まとめ

threadedオプションは使わない方がよい。その代わりserverオプションでプロセス数を変えよう。

まだ、やっていないことは、WebSocketを使った時の振る舞い。長時間の同時コネクションでの振る舞いを見てみたいです。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4