0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GCPインスタンスでのheyインストール方法

Posted at

概要

  • GCPのインスタンスにheyをインストールする方法です。
  • heyとは
    • heyは、Go言語で書かれたHTTP負荷テストツールです。

参考URL

環境

  • GCPのComputeEngineなどのVMインスタンス。
  • OSはDebian系(Ubuntu, Debian, etc)を想定。

事前準備

  • 事前にGCPのインスタンスを作成しておく。
  • インスタンスにSSHでログインしておく。
    • マネジメントコンソール > ComputeEngine > VMインスタンス > SSHをクリックすると、SSHでログインできます。

インストール手順

  • SSHで接続したターミナルで以下のコマンドを実行します。

  • Goのインストール

    wget https://dl.google.com/go/go1.22.0.linux-amd64.tar.gz
    sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
    
  • 環境変数の設定

    export PATH=$PATH:/usr/local/go/bin
    source ~/.profile
    
    echo 'export PATH=$PATH:$HOME/go/bin' >> ~/.bashrc
    source ~/.bashrc
    
  • Goのバージョン確認

    • go version go1.22.0 linux/amd64 などのように表示されればOKです。
    go version
    
  • heyのインストール

    go install github.com/rakyll/hey@latest
    
  • heyがインストールされたか確認

    hey -h
    
    • 以下のように表示されればOKです。
    flag needs an argument: -h
    Usage: hey [options...] <url>
    
    Options:
    -n  Number of requests to run. Default is 200.
    -c  Number of workers to run concurrently. Total number of requests cannot
        be smaller than the concurrency level. Default is 50.
    -q  Rate limit, in queries per second (QPS) per worker. Default is no rate limit.
    -z  Duration of application to send requests. When duration is reached,
        application stops and exits. If duration is specified, n is ignored.
        Examples: -z 10s -z 3m.
    -o  Output type. If none provided, a summary is printed.
        "csv" is the only supported alternative. Dumps the response
        metrics in comma-separated values format.
    
    -m  HTTP method, one of GET, POST, PUT, DELETE, HEAD, OPTIONS.
    -H  Custom HTTP header. You can specify as many as needed by repeating the flag.
        For example, -H "Accept: text/html" -H "Content-Type: application/xml" .
    -t  Timeout for each request in seconds. Default is 20, use 0 for infinite.
    -A  HTTP Accept header.
    -d  HTTP request body.
    -D  HTTP request body from file. For example, /home/user/file.txt or ./file.txt.
    -T  Content-type, defaults to "text/html".
    -a  Basic authentication, username:password.
    -x  HTTP Proxy address as host:port.
    -h2 Enable HTTP/2.
    
    -host HTTP Host header.
    
    -disable-compression  Disable compression.
    -disable-keepalive    Disable keep-alive, prevents re-use of TCP
                            connections between different HTTP requests.
    -disable-redirects    Disable following of HTTP redirects
    -cpus                 Number of used cpu cores.
                            (default for current machine is 2 cores)
    

オプション解説

-n: 実行するリクエストの総数を指定します。デフォルトは200です。

-c: 同時に実行するワーカー(スレッドまたはプロセス)の数を指定します。全リクエスト数はこの同時実行レベルよりも小さくできません。デフォルトは50です。

-q: ワーカーごとの秒間クエリ数(QPS)でレート制限を設定します。デフォルトではレート制限はありません。

-z: リクエストの送信を続ける期間を指定します。この期間が経過すると、アプリケーションは停止して終了します。期間が指定された場合、-nオプションは無視されます。例: -z 10s(10秒間)、-z 3m(3分間)。

-o: 出力タイプを指定します。指定がない場合はサマリーが印刷されます。"csv"はサポートされている唯一の代替フォーマットで、レスポンスメトリクスをCSVフォーマットでダンプします。

-m: HTTPメソッドを指定します。GET, POST, PUT, DELETE, HEAD, OPTIONSのいずれか。

-H: カスタムHTTPヘッダーを指定します。必要な数だけフラグを繰り返して指定できます。例: -H "Accept: text/html" -H "Content-Type: application/xml".

-t: 各リクエストのタイムアウトを秒単位で指定します。デフォルトは20秒です。無限にするには0を使用します。

-A: HTTP Acceptヘッダーを指定します。

-d: HTTPリクエストボディを指定します。

-D: ファイルからHTTPリクエストボディを指定します。例: /home/user/file.txtや./file.txt。

-T: Content-Typeを指定します。デフォルトは"text/html"です。

-a: ベーシック認証をusername:passwordの形式で指定します。

-x: host:port形式でHTTPプロキシアドレスを指定します。

-h2: HTTP/2を有効にします。

-host: HTTP Hostヘッダーを指定します。

-disable-compression: 圧縮を無効にします。

-disable-keepalive: Keep-Aliveを無効にし、異なるHTTPリクエスト間でTCP接続の再利用を防ぎます。

-disable-redirects: HTTPリダイレクトの追跡を無効にします。

-cpus: 使用するCPUコアの数を指定します。デフォルトは現在のマシンのコア数に基づいています。

heyのコマンド例

  • 条件:1秒あたり10リクエストを50ワーカーで60秒間継続してリクエストを送信する場合

    • ワーカー数c: 50
    • 秒間クエリq: 10
    • リクエスト継続時間z: 60秒
    • リクエストメソッドm: POST
    • コンテンツタイプT: application/json
    • リクエストボディd: {"name": "john", "age": 30, "job": "engineer"}
    • リクエストURL: https://example.com/api/v1/users
    hey -c 50 -q 10 -z 60s -m POST -T application/json -d '{"name": "john", "age": 30, "job": "engineer"}' https://example.com/api/v1/users
    
  • このように、heyを使って、HTTPリクエストを送信することで、Webサーバーの負荷テストを行うことができます。

  • 上記の例でのheyコマンドの実行結果は、以下のようになります。テキスト形式での結果が表示されます。

    Summary:
    Total:        60.1276 secs
    Slowest:      0.5428 secs
    Fastest:      0.1239 secs
    Average:      0.1284 secs
    Requests/sec: 388.3577
    
    Total data:   10110983 bytes
    Size/request: 433 bytes
    
    Response time histogram:
    0.124 [1]     |
    0.166 [23300] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    0.208 [0]     |
    0.250 [0]     |
    0.291 [0]     |
    0.333 [0]     |
    0.375 [0]     |
    0.417 [0]     |
    0.459 [31]    |
    0.501 [13]    |
    0.543 [6]     |
    
    
    Latency distribution:
    10% in 0.1259 secs
    25% in 0.1267 secs
    50% in 0.1276 secs
    75% in 0.1284 secs
    90% in 0.1295 secs
    95% in 0.1301 secs
    99% in 0.1323 secs
    
    Details (average, fastest, slowest):
    DNS+dialup:   0.0007 secs, 0.1239 secs, 0.5428 secs
    DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0040 secs
    req write:    0.0000 secs, 0.0000 secs, 0.0059 secs
    resp wait:    0.1276 secs, 0.1238 secs, 0.2294 secs
    resp read:    0.0000 secs, 0.0000 secs, 0.0009 secs
    
    Status code distribution:
    [404] 23351 responses
    
  • 以上で、GCPインスタンスでのheyインストール方法の説明を終わります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?