Google App Engineを使っているとミドル以下のチューニングありませんしね。
というわけで、勉強のための参加でした。
結果は8位だったので、半分よりは僅かに上というところ。
ネタはWordpressへのコメント投稿の高速化で、abで並列20で500件のコメント投稿を2回計測して、速いほうが成績。
お題が発表された時点で、データの読み込みは殆ど無いのでMySQLがネックになることはないだろうと思いました。
ちなみにチューニング中は並列20の件数100で計測していたので、その秒数も以下に書いていきます。
vmstatとtopで計測したところ、httpdが立ち上がりまくって、CPU使いまくっていました。
というわけでApacheとPHPをターゲットにします。
まずはPHPのAPCをインストール。これをPHP本体に添付しないのは何故なんでしょうか。
8.408秒。
APC入れるだけで1.7倍です。
eAcceleratorという選択肢もありましたが、APCに慣れていたのでAPCを選択しました。eAcceleratorを使った方もいらっしゃいましたが、APCとの差はなかったようです。
PHPのバージョンをあげようかと思いましたが5.3が入っていたので、見送り。PHPはバージョンごとに性能はかなり変わりますので、もし5.1だったら5.3を入れたでしょう。
次にApacheの設定です。
CPUバウンドになっているので、無駄にプロセスが起動してもしょうがありません。
StartServers, MinSpareServers, MaxSpareServers, MaxClientsを全て20にしてみます。
6.953秒。
結構速くなりました(でも多分、計測誤差なんじゃないかなーと今は思います)。
次に、MySQLの設定をいろいろ変更しましたが、まったく速くなりません。ここで時間をかなり使ってしまいました。以下のようなことをしましたが、速度は変わりませんでした。
- WordpressのテーブルがMyISAMだったのをInnoDBに変更
- コメントテーブルのインデックスを削除
- その他MySQLのメモリ系のパラメータをいろいろ変えてみる
Apacheのログをオフにしてみても変わりません。もう、データ書き込みは余裕すぎるのでチューニングしても意味ない感じです。
ここでやることなくなったので、ビールを飲みに行きます。ゼロスタの方とお喋りして癒されるなどします。
また、会場のBGMはボカロやら東方やらアニソンやら、趣味全開な感じでした。普段も仕事中はボカロBGMにしているので、ボカロ聴くと気合が入りましたね。
続いてAPCの設定をいろいろ変更します。ほとんど関係なかったのですが、apc.statの設定を0にしたら速くなりました。
6.136秒。
APCはスクリプトのコンパイルをキャッシュするのですが、ファイルにアクセスがあるたびに再コンパイルが必要かどうか判定を行っています。apc.statをオフにすると、このチェックを行わないので高速になります。
通常はIOや他の部分が重いので、たいした高速化にはならないのでオフにしませんが、今日のネタには効きました。ちなみにFacebookはapc.statをオフにしているそうです。
その後、Apacheの後ろにnginx + PHP-FastCGI構成にしようとしましたが、やったことが無かったので時間がかかってしまい諦めました。
さて、上位陣はPHPを最適化コンパイルしたり、不要なモジュールをはずしてコンパイルしていたようです。また1位の方はPHP5.4にしていました。これはかなり高速化になったようです。
今回の結論としては、コンパイルキャッシュ、PHPのバージョンなど、劇的な変更は効果があるが、ちょっとした設定の変更では速くならない。それを頑張るならインスタンス増やしたりスケールアップするほうがコスト的にもイイよねってことで、いい感じにAmazon Web Servicesの宣伝になったかと思います(笑)
最後になりましたが、ゼロスタートさん、ECナビさん、Amazonさん、技評さん、ありがとうございました。
おまけ。
懇親会でリスがいたので写真とりました。
僕はびっくりしたのですが、AWS系のイベントでは普通なんでしょうか? みんな普通にリスと遊んでいました。ちなみに中の人も可愛いです。
Google App Engineもマスコット用意したいですね。エンジンみたいな?
さらにこの後、玉川さん達と飲みにいきました。みなさんかなり熱く語っていただき、非常に楽しかったです。ありがとうございました。Google App Engineもアピールしておきました(うざかったらごめんなさい)。
0 件のコメント:
コメントを投稿