EC2上のLiteSpeedにPHP導入や検証をしてみた
こんにちは、コンサル部@大阪オフィスのTodaです。
前回LiteSpeedを導入する記事をあげまして以降PHPの導入や 他のWebサーバとのパフォーマンス比較などを行っております。 今回はその2点についてご紹介したいと思います。
導入に関する方法については下記記事をご覧下さい。
PHPを導入してみる
LiteSpeedには標準でPHP5.4か7.3がインストールされています。
今回PHPで最新の7.4を導入してみました。
PHPのコンパイル
LiteSpeedにはPHPを簡単に導入できるようにGUIにメニューがあります。
管理画面にログインしてをして ツール > PHPのコンパイル から操作をおこないます。
PHPの導入バージョンを選択して次をクリックします。
ビルドオプションの設定
この画面では導入するPHPに対して mysqli や mbstringなどの拡張モジュール、アドオンのmemcachedを導入する設定をします。
設定後、次をクリックします。
ソースのダウンロード
必要なソースをLiteSpeedが自動で集めてくれます。
1分ほど時間がかかりますのでステータスが成功になるまで待ちます。
ステータスが変われば、次をクリックします。
ソースのコンパイル
ソースのコンパイルを実行します。
上記実行した場合にセキュリティの問題でコマンドを使用して下さいと指示ができました。
サーバコンソールでコマンドを実行します。
sudo /usr/local/lsws/phpbuild/buildphp_manual_run.sh
私が試したところいくつもパッケージ不足があり対応が必要でした。
Yumコマンドをまとめておきます。
sudo yum install gcc
sudo yum install libxslt-devel
sudo yum install openssl-devel
sudo yum install sqlite-devel
sudo yum install curl-devel
sudo yum install oniguruma-devel
下記はエラーと戦った内容です。
sudo /usr/local/lsws/phpbuild/buildphp_manual_run.sh
【結果】
Manually running installation script: /usr/local/lsws/phpbuild/buildphp_1597802007.4.install.sh
Running at background with command:
/usr/local/lsws/phpbuild/buildphp_1597802007.4.install.sh 1> /usr/local/lsws/phpbuild/buildphp_1597802007.4.log 2>&1
chown -R lsadm:lsadm /usr/local/lsws/phpbuild/php-7.4.8
エラー: configure: error: no acceptable C compiler found in $PATH
むむ??エラーが出ました。ログを確認するとCコンパイラがないよ!となっていました。
【エラーログ】
checking for cc... no
checking for gcc... no
configure: error: in `/usr/local/lsws/phpbuild/php-7.4.8':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
**ERROR** Could not configure PHP build
【対応コマンド】
sudo yum install gcc
エラー: error: Package requirements (libxml-2.0 >= 2.7.6) were not met: No package 'libxml-2.0' found
モジュール不足で他にもエラーが出ました。libexml-2.0が古いと言っているようです。
【エラーログ】
checking for libxml-2.0 >= 2.7.6... no
configure: error: Package requirements (libxml-2.0 >= 2.7.6) were not met:
No package 'libxml-2.0' found
【対応コマンド】
sudo yum install libxslt-devel
エラー: Package requirements (openssl >= 1.0.1) were not met: No package 'openssl' found
opensslがないと言っているようです。
調べてみるとopensslは存在して、呼び出しが正常にできていないようです。
【エラーログ】
checking for openssl >= 1.0.1... no
configure: error: Package requirements (openssl >= 1.0.1) were not met:
No package 'openssl' found
【対応コマンド】
sudo yum install openssl-devel
エラー: Package requirements (sqlite3 > 3.7.4) were not met:No package 'sqlite3' found
sqlite3がないと言っているようです。
調べてみるとsqlite3はインストールされていてsqlite-develが不足しているようです。
【エラーログ】
checking for sqlite3 > 3.7.4... no
configure: error: Package requirements (sqlite3 > 3.7.4) were not met:
No package 'sqlite3' found
【対応コマンド】
sudo yum install sqlite-devel
エラー: Package requirements (libcurl >= 7.15.5) were not met: No package 'libcurl' found
libcurlがないと言っているようです。
上記sqlite3と同じようにcurl-develが不足しているようです。
【エラーログ】
checking for libcurl >= 7.15.5... no
configure: error: Package requirements (libcurl >= 7.15.5) were not met:
No package 'libcurl' found
【対応コマンド】
sudo yum install curl-devel
エラー: Package requirements (oniguruma) were not met: No package 'oniguruma' found
oniguruma(鬼車)、、、名前かっこいい!正規表現のライブラリです。
上記sqlite3と同じようにoniguruma-develが不足しているようです。
【エラーログ】
checking for oniguruma... no
configure: error: Package requirements (oniguruma) were not met:
No package 'oniguruma' found
【対応コマンド】
sudo yum install oniguruma-devel
エラー: virtual memory exhausted: Cannot allocate memory
スペックが低いサーバで試しておりましてメモリが足りないとエラーが表示されました。
Swap領域を2GB設定して解決しています。
【エラーログ】
virtual memory exhausted: Cannot allocate memory
【対応コマンド】
sudo mkdir /var/lib/swap
sudo cd /var/lib/swap/
sudo fallocate -l 2g swapfile.0
sudo mkswap swapfile.0
sudo chmod 600 swapfile.0
sudo swapon swapfile.0
コンパイルの完了
処理が正常に終了するとステータスが正常に変わります。
PHPバージョン変更
標準で導入されているPHPのバージョンを7.4に変更します。
管理画面のサーバ情報 > 外部アプリ > lsphpの編集をクリックします。
設定内のコマンドをPHP7.4のパスに変更します。
今回 $SERVER_ROOT/lsphp7/bin/lsphp を入力しています。
再起動とPHP確認
設定完了後、1度LiteSpeedを再起動します。
再起動することでPHP7.4の画面が表示されました。
Webサーバのパフォーマンスを簡単に検証してみる
今回はApache Benchを使ってApache, Nginx, LiteSpeedそれぞれの検証をしてみました。表の要素は下記になります。
- 内容:検証内容 -c : 並列数 -n : 総数
- Complete requests : リクエストの処理数
- Failed requests : リクエストの失敗数
- Requests per second:1秒間に処理したリクエスト数の平均値(ミリ秒)
- Time taken for tests:1リクエストの処理に要した時間の平均値(ミリ秒)
静的ページアクセスのケース
Webサーバ | 内容 | Complete requests | Failed requests | Requests per second [#/sec] |
Time taken for tests [ seconds] |
---|---|---|---|---|---|
Apache | -n 10000 -c 100 | 10000 | 0 | 13846.16 | 0.722 |
Apache | -n 10000 -c 500 | 10000 | 0 | 11708.90 | 0.854 |
Apache | -n 10000 -c 1000 | 10000 | 0 | 11643.08 | 0.859 |
Apache | -n 10000 -c 5000 | 10000 | 0 | 10436.04 | 0.958 |
Nginx | -n 10000 -c 100 | 10000 | 0 | 22169.90 | 0.451 |
Nginx | -n 10000 -c 500 | 10000 | 0 | 21090.15 | 0.474 |
Nginx | -n 10000 -c 1000 | 10000 | 0 | 18879.96 | 0.530 |
Nginx | -n 10000 -c 5000 | 10000 | 2 | 10122.40 | 0.988 |
LiteSpeed | -n 10000 -c 100 | 10000 | 0 | 19418.72 | 0.515 |
LiteSpeed | -n 10000 -c 500 | 10000 | 0 | 19224.30 | 0.520 |
LiteSpeed | -n 10000 -c 1000 | 10000 | 0 | 18984.70 | 0.581 |
LiteSpeed | -n 10000 -c 5000 | 10000 | 0 | 17084.47 | 0.585 |
PHPページアクセスのケース
PHPの検証についてはphp-fpmの影響等もありますのでいまいちな結果となりました。
またLiteSpeedは途中で計測不能になりました。同時接続の制限や制限の仕組みが働いているようです。
Webサーバ | 内容 | Complete requests | Failed requests | Requests per second [#/sec] |
Time taken for tests [seconds] |
---|---|---|---|---|---|
Apache | -n 1000 -c 10 | 1000 | 0 | 2054.82 | 0.494 |
Apache | -n 1000 -c 50 | 1000 | 0 | 2035.75 | 0.491 |
Apache | -n 1000 -c 100 | 1000 | 0 | 2073.92 | 0.482 |
Apache | -n 1000 -c 500 | 1000 | 0 | 1152.21 | 0.868 |
Apache | -n 10000 -c 100 | 10000 | 0 | 1931.64 | 5.177 |
Apache | -n 10000 -c 500 | 10000 | 0 | 1438.99 | 6.949 |
Apache | -n 10000 -c 1000 | 10000 | 988 | 1509.74 | 6.624 |
Nginx | -n 1000 -c 10 | 1000 | 100 | 2111.28 | 0.474 |
Nginx | -n 1000 -c 50 | 1000 | 120 | 2113.38 | 0.473 |
Nginx | -n 1000 -c 100 | 1000 | 104 | 2137.43 | 0.468 |
Nginx | -n 1000 -c 500 | 1000 | 773 | 4116.28 | 0.243 |
Nginx | -n 10000 -c 100 | 10000 | 970 | 2179.25 | 4.589 |
Nginx | -n 10000 -c 500 | 10000 | 1600 | 1483.94 | 6.739 |
Nginx | -n 10000 -c 1000 | 10000 | 2181 | 1546.41 | 6.467 |
LiteSpeed | -n 1000 -c 10 | 992 | 114 | 80.26 | 12.360 |
LiteSpeed | -n 1000 -c 50 | 990 | 92 | 133.16 | 7.435 |
LiteSpeed | -n 1000 -c 100 | -- | -- | -- | -- |
まとめ
LiteSpeedを含むWebサーバで色々検証をしてみました。
パフォーマンスの検証をしたところ静的なコンテンツの配信には向いているようでかなりパフォーマンスが高いことがわかりました。
PHPページにアクセスした際に一定数を超えるとアクセスを受付しない問題ですが、一定数アクセスをすると機能が働いてしまいアクセスを拒否するような動きをしています。検証をしてこの問題を対処したいと思います。