UTALI

書き溜めておいた技術記事や旅行記のバックアップです。

ローカルでサーバーの性能を検証 - wrk

コマンドwrkを使う

マシンの性能の限界までリクエストを行います。これによって最大同時接続数の目安を検証することが可能です。

構文は

wrk -t{使用するコア数} -c{同時接続するHTTPコネクション数} -d{リクエストを継続する秒数}s {リクエスト先のパス}

Python - Djangoの性能を検証

テスト用にローカルでPythonのHTTPサーバーモジュールのDjangoを動作させてみましょう。

wrk -t2 -c400 -d30s http://localhost:8000/

結果は・・・

Running 30s test @ http://localhost:8000/
  2 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   193.69ms   87.10ms 354.96ms   67.91%
    Req/Sec   149.78     56.23   310.00     77.83%
  3334 requests in 30.08s, 6.09MB read
  Socket errors: connect 0, read 4576, write 13, timeout 0
Requests/sec:    110.84
Transfer/sec:    207.28KB

30秒間に3334回のHTTPリクエストを裁くことができました。

Node.jsの性能を検証

同様にNode.js(Express)の性能を検証してみましょう

wrk -t2 -c400 -d30s http://localhost:3000/

こちらも400回同時のアクセスを30秒間限界まで実行します。

Running 30s test @ http://localhost:3000/
  2 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.14s   183.05ms   2.00s    84.07%
    Req/Sec   177.53     89.47   383.00     64.75%
  9979 requests in 30.08s, 3.53MB read
  Socket errors: connect 0, read 285, write 4, timeout 36
Requests/sec:    331.70
Transfer/sec:    120.18KB

9979回という結果で、Djangoの約3倍の接続数を裁くことができました。

特にレイテンシが平均1.14sという優れた結果でDjangoの200倍!近い性能であることは特筆に値するでしょう。

当ブログでもNode.jsの性能の高さを以前に紹介しましたが、ここでもノンブロッキングIOの威力の高さを再確認することとなりました。

Nginx

最強のWebサーバーとの呼び声も高い?Nginxもテストしてみました。

wrk -t2 -c400 -d30s http://localhost:8080/
2 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    25.65ms    4.79ms  96.30ms   87.25%
    Req/Sec     7.65k   667.26     9.56k    86.00%
  456955 requests in 30.02s, 370.40MB read
  Socket errors: connect 0, read 297, write 0, timeout 0
Requests/sec:  15222.76
Transfer/sec:     12.34MB

456955リクエストを捌き、平均レイテンシは25.65ms・・

Go言語

wrk -t2 -c400 -d30s http://localhost:8080/
Running 30s test @ http://localhost:8080/
  2 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    21.24ms   18.60ms 377.37ms   81.93%
    Req/Sec    10.65k     2.06k   15.62k    80.23%
  636030 requests in 30.05s, 163.77MB read
  Socket errors: connect 0, read 118, write 0, timeout 0
Requests/sec:  21162.61
Transfer/sec:      5.45MB

636030リクエストで平均レイテンシが21.24ms(笑)

注意してもらいたいのは、このテストは手持ちのMacBook Airという環境上でのベンチマークであり、実際のサーバーではさらに高い性能が期待されるということです。

Webアプリケーションを公開する前はこのように簡単なベンチマークを行っておくと最大同時アクセス数の目安がつけておくとよいでしょう。