Apache、Nginx、H2Oでベンチマークしてみた
すいません!!!
この記事を書いた後いろいろ調べてたら、wrkはhttp2に対応していませんでした! ということで、今回のベンチマークはApache、Nginx、H2OのHTTP1.1でのベンチマークとなります!
ちゃんとHTTP2でベンチマーク取ったものを後日公開します!
最近HTTP2が色々盛り上がってるのは知ってたんですが、YAPC:ASIA 2015に行ったらH2Oが気になり始めたんで普段使ってるApacheよりきっとH2Oが早いぜって言ったら「いやH2Oとか知らんから、とりあえずNginxやろうよ」って言われたのでNginXも一緒にベンチマークしてみました。
環境
さくらサーバのVPS
メモリ1G
CPU 2コア
表示させるもの
表示させるのはなんでも良かったんですがとりあえず普通のページっぽいのが良かったんでここの無料テンプレートを使ってみました。
《無料》ホームページテンプレート.com | 商用可能なホームページテンプレート・WordPressテーマが完全無料
表示するとこんな感じ f-tpl.com
ついでにDockerやってみる
やったことないけどDocker流行ってるらしいから使ってみようと思ってやってみた。
それぞれのDockerfileはこんな感じ
Apache2
# cat docker/httpd/Dockerfile FROM ubuntu:latest RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list RUN apt-get update RUN apt-get install -y apache2 ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_PID_FILE /var/run/apache2.pid ENV APACHE_RUN_DIR /var/run/apache2 ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_LOCK_DIR /var/lock/apache2 ADD ./htdocs /var/www EXPOSE 80 CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
Nginx
FROM ubuntu:latest RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list RUN apt-get update RUN apt-get install -y nginx ADD server.conf /etc/nginx/conf.d/server.conf ADD ./htdocs /var/www EXPOSE 80 CMD /usr/sbin/nginx -g "daemon off;"
server { listen 80 default; root /var/www; }
H2O
FROM ubuntu:latest RUN apt-get update RUN apt-get install -y git RUN apt-get install -y openssl RUN apt-get install -y libssl-dev RUN apt-get install -y cmake RUN rm -rf /var/lib/apt/lists/* RUN git clone https://github.com/h2o/h2o \ && cd h2o \ && git submodule update --init --recursive \ && cmake . \ && make h2o ADD ./htdocs /var/www ADD ./h2o.conf ./h2o/h2o.conf WORKDIR /h2o ENTRYPOINT ["./h2o", "-c", "h2o.conf"]
listen: 80 num-threads: 16 num-name-resolution-threads: 1 max-connections: 10240 hosts: default: paths: /: file.dir: /var/www access-log: /dev/stdout
ベンチーマークにはwrk使った
詳しくはこちら
HTTP ベンチマークツール wrk の使い方 | Boiler Room
結果
# wrk -t 4 -c 100 -d 10 http://localhost:8080/ Running 10s test @ http://localhost:8080/ 4 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 75.85ms 89.06ms 1.04s 97.83% Req/Sec 381.83 54.12 595.00 71.50% 15226 requests in 10.03s, 92.67MB read Requests/sec: 1518.43 Transfer/sec: 9.24MB
# wrk -t 4 -c 100 -d 10 http://localhost:8081/ Running 10s test @ http://localhost:8081/ 4 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 45.18ms 47.41ms 436.21ms 85.71% Req/Sec 721.54 309.45 1.59k 66.75% 28802 requests in 10.06s, 173.45MB read Requests/sec: 2864.44 Transfer/sec: 17.25MB
# wrk -t 4 -c 100 -d 10 http://localhost:8082/ Running 10s test @ http://localhost:8082/ 4 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 24.84ms 7.14ms 69.96ms 76.78% Req/Sec 1.00k 231.60 2.03k 66.50% 40141 requests in 10.08s, 242.71MB read Requests/sec: 3983.43 Transfer/sec: 24.09MB
まとめ
ということで今回はH2Oの圧勝という形になりました。もう少し色々チューニングしたら結果も変わるかと思うんで詳しい人教えてください。