EC2上のLiteSpeedにPHP導入や検証をしてみた

2020.08.19

こんにちは、コンサル部@大阪オフィスのTodaです。

前回LiteSpeedを導入する記事をあげまして以降PHPの導入や 他のWebサーバとのパフォーマンス比較などを行っております。 今回はその2点についてご紹介したいと思います。
導入に関する方法については下記記事をご覧下さい。

PHPを導入してみる

LiteSpeedには標準でPHP5.4か7.3がインストールされています。
今回PHPで最新の7.4を導入してみました。

PHPのコンパイル

LiteSpeedにはPHPを簡単に導入できるようにGUIにメニューがあります。
管理画面にログインしてをして ツール > PHPのコンパイル から操作をおこないます。
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の編集をクリックします。

LiteSpeedのPHPバージョン切り替え

設定内のコマンドをPHP7.4のパスに変更します。
今回 $SERVER_ROOT/lsphp7/bin/lsphp を入力しています。

LiteSpeedのPHPバージョン切り替え設定

再起動とPHP確認

設定完了後、1度LiteSpeedを再起動します。
再起動することでPHP7.4の画面が表示されました。

LiteSpeedの再起動とPHP確認

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ページにアクセスした際に一定数を超えるとアクセスを受付しない問題ですが、一定数アクセスをすると機能が働いてしまいアクセスを拒否するような動きをしています。検証をしてこの問題を対処したいと思います。