Tuning]仕事でApache+Ruby+PostgreSQLのパフォーマンスチューニングに携わったので、チューニング項目について備忘録でまとめておきます。ここに挙げている以外の項目も色々あると思いますので参考程度でお願いします。不足している項目があればどこかでつぶやいてください。1.Apacheのチューニング項目Apacheのチューニングは、httpd.conf(/etc/httpd/conf/httpd.conf)に下記の項目を設定します。Module)はworkerを利用しています。ThreadsPerChildThreadsPerChildは、1プロセスで生成可能なスレッド数を設定します。30と設定すれば1プロセスで30スレッドまで生成されます。MaxClientsMaxClientsは最大スレッド数を設定します。ThreadsPerChildの超過に応じてMaxClientsになるまで必要分のプロセスが増えていきます。120と設定すれば、最大4プロセスで動作します。ServerLimitServerLimitは、MaxClientsに設定可能な上限値を設定します。MaxClientsとThreadsPerChildの組み合わせの最大が16プロセス以上必要になる場合にのみ使用します。keepAlivekeepAliveは同一クライアントに対してコネクション接続を維持するための設定ですが、トラヒックの場合は無効にした方がいいようです。offkeepAliveを利用する場合はタイムアウト値を見直しましょう。デフォルトは15秒です。以下の設定では3秒でタイムアウトします。RailsなどををApacheで動かすためのApacheモジュールです。Passengerのチューニングは、passnger.conf(/etc/httpd/conf.d/passnger.conf)に下記の項目を設定しますが、Apacheのhttpd.confに直接設定することもできます。両方に設定した場合、httpd.confの設定が優先されました。Railsのプロセス最大起動数を設定します。多いほど大量のリクエストを同時に処理できますが、その分多くのメモリ必要となります。次の設定では最大15プロセス起動します。RailsのプロセスがApacheのスレッド数を超えることはありませんでした。PassengerUseGlobalQueuePassengerのグローバルキューの有効/無効を設定します。Passengerが受け取ったリクエストについて、デフォルトではアプリケーションインスタンス単位にキューが用意されています。処理が長いリクエストの後続のキューのリクエストは、他のインスタンスキューが空いた状態になってもずっと待たされることになります。PassengerUseGlobalQueueを有効にすれば1つのキューで複数インスタンスに割り当てるので、前述の事象を回避できます。Railsのチューニングは、Railsアプリケーションのconfig/database.ymlに下記の項目を設定します。YAML形式なので気をつけてください。Railsで利用するデータベースのコネクションプールを設定します。デフォルトは5ですが、次のように設定すれば10コネクション用意されます。104.PostgreSQLPostgreSQLのチューニングは、postgresql.conf(/var/lib/pgsql/data/postgresql.confなど)に下記の項目を設定します。max_connectionsデータベースの最大同時接続を設定します。チューニングではありませんが、プライマリキー以外のキーでSELECTを行うとコストがかかることがあるので、PostgreSQLのコマンドラインツールでインデックステーブルを作成するとよいでしょう。tablename(columname);nameの部分に任意の名前を設定し、インデックスを作成したいテーブル名tablenameと対象のカラム名columnameを設定します。具体的な操作手順も掲載しておきます。一般ユーザーからrootでログイン。suさらにpostgresユーザーでログイン。postgresコマンドラインツールpsqlを起動。database_nameはデータベース名を設定。database_nameインデックステーブルの確認。\diインデックステーブルの作成。tablename(columname);コマンドラインツール終了。\q5.チューニングのポイント複数の項目をチューニングする場合のポイントです。バックエンドの値をフロントエンドと同等かそれ以上にします。バックエンドで処理が詰まるとフロントエンドで待ち合わせやエラーが発生するためです。ApacheのMaxClientsを30にしているにもかかわらず、Railsアプリケーションの最大プロセス数PassengerMaxPoolSizeを10にしている場合などです。チューニングは複数の項目を同時に変更せず、1項目ずつ。複数の項目を同時に変更するとどの変更で効果があるのか分からなくなるためです。*必須(非表示)URL(U):情報を保存する?コメントへの返信ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。すべてのご質問にはお答えできない可能性があります。Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。