VPSのレンタルサーバを利用してWEB/APサーバ(Apache、Tomcat)が最大何件まで同時に処理できるのか測ってみた
掲載日:2021年1月1日
INFOMARTION > VPSのレンタルサーバを利用してWEB/APサーバ(Apache、Tomcat)が最大何件まで同時に処理できるのか測ってみた
概要
WEB/APサーバ(Apache、Tomcat)が最大何件まで同時に処理できるのか測ってみたので、その結果を書きたいと思います。さくらのVPSサーバをレンタルしてWEB/APサーバを構築したのですが、実際に最大リクエスト何件までさばけるのか気になったので調査しました。VPSサーバのスペックを選定する参考にしてみてください。
今回はWEB/APサーバ(Apache、Tomcat)で測定しましたが、WEB(Apache)のみで測定した場合の記事は以下となりますので参考にしてみてください。
VPSのレンタルサーバを利用してWEBサーバ(Apache)が最大何件まで同時に処理できるのか測ってみた
1. 測定
1-1. 測定環境
以下が今回測定する環境となります。
■レンタルサーバ情報
レンタルサーバ | さくらのVPS |
---|---|
CPU | 2コア |
メモリ | 1GB |
SSD | 50GB |
■サーバ情報
OS | CentOS 7.4 64bit |
---|---|
WEBサーバ | Apache HTTP Server 2.4.41 |
APサーバ | Apache Tomcat 9.0.27 |
DBサーバ | PostgreSQL 10.2 |
Java | OpenJDK 11 |
1-2. 測定方法
JMeterを使って測定したいと思います。JMeterとはJavaで動作する負荷測定ツールです。このツールを利用すると同時にリクエストが大量に投げられます。JMeterを使って同時リクエスト数を徐々に上げていき、処理がさばけなくなるまで負荷を上げていきたいと思います。
具体的な条件としては以下です。
- リクエスト間隔・・・5秒
- 同時リクエスト数・・・10件(徐々に10件ずつ増やして測定)
- 測定時間・・・60秒
測定時間が「60秒」、リクエスト間隔「5秒」なので12回(60÷5)繰り返しアクセスをしたいと思います。
1-3. 測定結果
結局、どのスペックのサーバだと、どれくらい処理できるのかといった結論が気になる人も多いと思うので先に結論を記載したいと思います。
CPU:2コア メモリ:1GB SSD:50GB | 同時リクエスト80件まで処理が可能 |
---|
今回測定した結果から、上記となりました。上記の結果から推測すると以下の通りになるのではと思います。サーバのスペックを選ぶ際の基準としてみてください。
CPU:1コア メモリ:512MB SSD:25GB | 同時リクエスト20件まで処理が可能 |
---|---|
CPU:2コア メモリ:1GB SSD:50GB | 同時リクエスト80件まで処理が可能 |
CPU:3コア メモリ:2GB SSD:100GB | 同時リクエスト200件まで処理が可能 |
上記はさくらのVPSに存在するスペックベースに記載していますが、さくらのVPSの最低スペックのプラン(CPU:1コア、メモリ:512MB、SSD:25GB)でも20人程度の規模のシステムなら問題なく動作することが分かりました。
2. 測定結果詳細
先に測定結果を記載させていただきましたが、どの様な結果から測定結果を記載しているか気になる方は、これから記載する測定結果詳細の確認もしてみてください。
2-1. WEB/APサーバ(Apache、Tomcat)測定
以下の様なログイン画面からログインして、ログイン後、一覧画面を表示させるシナリオでリクエストを投げました。ちなみに、認証機能含め、Springフレームワークを使って作られた画面となります。
測定すると以下の様な結果となりました。
- 同時リクエスト数10の場合⇒OK
- 同時リクエスト数20の場合⇒OK
- 同時リクエスト数30の場合⇒OK
- 同時リクエスト数40の場合⇒OK
- 同時リクエスト数50の場合⇒OK
- 同時リクエスト数60の場合⇒OK
- 同時リクエスト数70の場合⇒OK
- 同時リクエスト数80の場合⇒OK
- 同時リクエスト数90の場合⇒NG
90件目でエラーが発生しました。原因はApacheへのコネクション接続エラーでした。この時のサーバの状態としては以下の様になっていました。
- CPU使用率・・・26%
- メモリ使用率・・・100%
完全にメモリ不足がボトルネックとなっていました。
少しマニアックな内容となりますが、Apacheのマルチプロセッシングモジュール (MPM)の設定は以下となります。MPMとは簡単に説明するとどれだけApacheに並列処理させるかの設定です。
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule>
注目する設定は「MaxRequestWorkers」の「250」となります。こちらはApacheに最大何件同時処理させるかの設定となります。「250」なので250件は最大平行処理できそうですが、メモリ使用率を見ると1件あたり8MB程度メモリを使用していました。
Javaがメモリを320MB(heapが248M、metaspaceが72M)、Apacheがメモリを640MB(8M×80件)使っている様でApacheのMPMの設定値は「250」ですが「80」以上プロセスを作成出来ないようでした。
※サーバのメモリは1Gのため、ApacheとJavaのメモリを足すと960MBとなり、ほぼ上限まで達しています。
APサーバ(Java側)は問題なく動作していたので、ボトルネックはWEBサーバ(Apache)といった結果となりました。
ApacheとTomcatを入れて動かす場合はスペック「CPU:2コア、メモリ:1GB、SSD:50GB」だと同時アクセス数「80」が限界だと分かりました。(前提として、Javaのメモリ設定はheapが248M、metaspaceが72Mとなっています。)
2-2. 考察
ここからは考察になりますが、メモリがボトルネックとなっているのでメモリを変更すれば同時並行処理できる処理数も増えるのではないかと思います。
【現在(メモリ1GB)】
- メモリ:1GB
- Apacheのスレッド数:80件
- Apacheの1スレッドあたりのメモリ消費量:8MB
- Apacheのメモリ消費量:640MB(80件×8MB)
- Tomcatのメモリ消費量:320MB(heapが248M、metaspaceが72M)
- Apache+Tomcatのメモリ消費量:960MB
【変更後(メモリ2GB)】
- メモリ:2GB
- Apacheのスレッド数:200件
- Apacheの1スレッドあたりのメモリ消費量:8MB
- Apacheのメモリ消費量:1600MB(200件×8MB)
- Tomcatのメモリ消費量:320MB(heapが248M、metaspaceが72M)
- Apache+Tomcatのメモリ消費量:1920MB
メモリを2GBにすれば200件くらいは同時並行処理できるのではないかと思います。メモリを3GBにすればさらに同時並行処理できそうですが、ApacheのMPMの「MaxRequestWorkers(最大何件同時処理させるか)」が「250」なので、さらにメモリをあげる場合はこちらのチューニングも必要になってきそうです。また、Javaのメモリチューニングも必要になってくる可能性もあります。逆にメモリを半分にすると以下の様になるのではと思います。
【変更後(メモリ512GB)】
- メモリ:512GB
- Apacheのスレッド数:20件
- Apacheの1スレッドあたりのメモリ消費量:8MB
- Apacheのメモリ消費量:160MB(20件×8MB)
- Tomcatのメモリ消費量:320MB(heapが248M、metaspaceが72M)
- Apache+Tomcatのメモリ消費量:480MB
3. まとめ
WEB/APサーバ(Apache、Tomcat)が最大何件まで同時に処理できるのか測ってみた結果を記載させていただきました。意外とさくらのVPSの最低スペックのプラン(CPU:1コア、メモリ:512MB、SSD:25GB)でも20人程度の規模のシステムなら問題なく動作するので契約する際は参考にしてみてください。
あくまで今回の調査は限界性能で他のソフトウェアが動いていないといった前提のもと調査しています。限界値なので少し余裕を持ったスペックを選ぶことをおすすめします。
さくらVPSについてまとめた記事もありますので参考にしてください。
さくらVPSのリンクは以下となります。
最後までご覧いただきありがとうございました。