ぽんこつエンジニアのブログ

PHP チョット デキル

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の圧勝という形になりました。もう少し色々チューニングしたら結果も変わるかと思うんで詳しい人教えてください。

参考

qiita.com