[PHP] CodeIgniterはKUSANAGI Runs on Dockerで速くなるのか?ベンチマークしてみた

WordPressを高速化してくれるKUSANAGIですが、WordPress以外でもPHPプログラムなら高速化が可能という話を聞いたので、メインで使用しているPHPフレームワーク・CodeIgniterでどれくらいの速度が出るのかをテストしてみました。

テスト環境

まずは、テスト環境です。

時間貸ししてくれるConoHa VPSを利用しました。手軽に使えるという点で、最安値の512MBプランにしています。KUSANAGIはDockerコンテナで動かしています。

プレーンなCodeIgniter CodeIgniter on KUSANAGI
サーバー ConoHa 512MBプラン
コンテナ php:7.0-apacheコンテナ KUSANAGI-nginx + KUSANAGI-php7
APPS CodeIgniterのデフォルト状態

CodeIgniter on KUSANAGIのほうは、本来なら、「kusanagi provision」でLEMPを環境用意してテストしたいところですが、Docker用のKUSANAGIではKUSANAGIコマンドに一部不具合があるので、今回は使っていません。(そもそも、KUSANAGI Runs on Dockerの公式サイトでは、KUSANAGIコマンドは使えないとなっています)

今回は、一度WordPress環境ができあがったあとに、DocumentRootの中身をCodeIgniterに書き換えてテストしました。

テスト方法

apache benchを使います。

ab -n 100 -c 10 https://hogehoge.com/

1ユーザーあたり10アクセスという条件で、10人、100人、500人と増やしていきます。CodeIgniter on KUSANAGIのほうは、bcacheのオン・オフそれぞれでテストをしました。

数字はいずれも「Requests per second(1秒あたりの処理回数)」で比較しています。

テスト結果

プレーンなCodeIgniter CodeIgniter on KUSANAGI CodeIgniter on KUSANAGI(bcache on)
10人 47.28 [#/sec] 71.89 [#/sec] 74.07 [#/sec]
100人 44.32 [#/sec] 74.40 [#/sec] 72.74 [#/sec]
500人 44.34 [#/sec]*1 71.57 [#/sec] 71.37 [#/sec]

*1:エラー「SSL handshake failed (5)」が発生

中身空っぽのページなんであれなんですが、KUSANAGIのほうが全般的に速度が出ました。

他のサイトでは、KUSANAGIをLEMPモードで動かすと、PHPフレームワークが10倍速くなったなんてベンチマークもあったので、「それくらい出るかなぁ。5倍くらいは出て欲しいなぁ」なんて思っていたので、少し残念です。

ただ、今回のテストはKUSANAGIをWordPressモードで動かしているためスピードが出ていないのかもしれません。また、最弱プランのVPSを使っているので単純にCPUのパワー不足の可能性もあります。(たまにSSL handshake failedが出ていたので、プロキシ側の処理限界に要因もありそうな気がします。)

一方、nginxのキャッシュを効かせる「bcache」をオンにしても、あまり効果が出ませんでした。これは、すっぴんのCodeIgniterなのでキャッシュしておくほどのコードがないのが要因かもしれません。


CodeIgniterはPHPフレームワークの中でも高速な部類に入るフレームワークですが、KUSANAGIを利用することでさらに高速化することができました。

今回は、Docker上のKUSANAGI(KUSANAGI Runs on Docker)でのベンチマークでしたが、ひょっとしたらKUSANAGIイメージを使ったプレーンなKUSANAGIマシンだともっと速度が出るかもしれないので、別の機会でトライしてみようと思います。