背景
- サーバー(EC2)上にApcheとTomcat立てていて、以下のようにフォワードプロキシからアクセスされていた
[ユーザ] => [フォワードプロキシ] => [Apache(リバースプロキシ)] => [Tomcat]
現象
- サーバーにアクセスすると体感的に遅い
- Chrome(25.0.1364.99)のデベロッパツールのNetworkで調べるとTimelineでConnectingが3sとかかかってたりする
対応
- ApacheのKeepAliveがOffだったのでOnにした
- VirtualHost中にKeepAlive Onを追加
- gracefulリスタート
- リバースプロキシ用途のサーバではworkerモデルを使いましょうということなので、ApacheのMPMをpreforkからworkerに切り替えた
- ApacheのMPM、「prefork」と「worker」を切り替える方法 – FlatLabs
$ sudo vi /etc/sysconfig/httpd
# => 以下のコメントアウトを外す
HTTPD=/usr/sbin/httpd.worker
$ sudo /etc/init.d/httpd restart
効果
- サーバーにアクセスすると体感的に早くなった
- ChromeのデベロッパツールのNetworkでConnectingが0のリクエストがほとんどになった
考察
- クライアントが限られていて一度のアクセスで複数リクエストが発生するためKeepAliveをオンにすると効果が大きい
- サーバーではフォワードプロキシからのアクセスに限定されていてコネクションを確立すると切らなくて良くなった。
- サーバーにアクセスすると画像やらCSSやら取ってくるためにコネクション確立の時間が馬鹿にならなかった
感想
- KeepAliveの効果は知ってましたがここまで劇的に効果があるとは思いませんでした
- 今までアクセスの多いサーバーを管理したことがなく初Apacheチューニング
はまった
- workerに切り替えた際にgracefulリスタートして切り替わっていなかった
$ sudo /etc/init.d/httpd graceful
$ ps aux | grep httpd
root 1628 0.0 0.1 199736 6772 ? Ss Feb14 0:29 /usr/sbin/httpd
apache 20482 0.0 0.1 200012 5192 ? S 16:08 0:00 /usr/sbin/httpd
$ sudo /etc/init.d/httpd restart
$ ps aux | grep httpd
root 6621 0.1 0.1 199312 5952 ? Ss 16:29 0:00 /usr/sbin/httpd.worker
apache 6759 0.0 0.1 947024 4768 ? Sl 16:30 0:00 /usr/sbin/httpd.worker