Gatlingでの負荷試験を、可能な限り1台で実施するための設定を試してみた
こんにちは、ゲームソリューション部のsoraです。
今回は、Gatlingでの負荷試験を、可能な限り1台で実施するための設定を試してみたことについて書いていきます。
はじめに
GatlingサーバとしてEC2を使用します。
OSはAmazon Linux 2023を使用します。
「可能な限り1台で実施するため」であり、最大パフォーマンスを出すこととは、ずれる設定もあることはご了承ください。
OSの設定
エフェメラルポートの上限変更
Gatlingにて以下のエラーが出ることがありました。
j.n.ConnectException: connect(..) failed: Cannot assign requested address
Gatlingの仕組みとして、リクエストは一時ポート(エフェメラルポート)を使用して実行されます。
そのため、Gatlingで大量のリクエストを実行してエフェメラルポートを使い切ると上記エラーが出るため、エフェメラルポートの範囲を広げます。
範囲を広げても使い切ってしまう場合は、台数を増やすしかないかなと思います。
以下のコマンドにて、エフェメラルポートの範囲を変更します。
# 現在の設定確認(60999-32768=28231個)
$ cat /proc/sys/net/ipv4/ip_local_port_range
32768 65535
# confファイルの編集
$ sudo nano /etc/sysctl.conf
net.ipv4.ip_local_port_range = 1024 65535
# 設定の反映
$ sudo sysctl -p
net.ipv4.ip_local_port_range = 1024 65535
# 設定変更後の確認(65535-1024=64511個)
$ cat /proc/sys/net/ipv4/ip_local_port_range
1024 65535
ファイルディスクリプタのソフトリミットの変更
ファイルディスクリプタは、OSにてファイルや入出力するリソースを識別するために使用される識別子です。
こちらも上限に引っかかってエラーになることがあるため、上限を確認していきます。
確認してみたところ、今回のAmazon Linux 2023では、ハードリミットとソフトリミットが一致しており、ソフトリミットをこれ以上上げることはできないため、変更しませんでした。
$ ulimit -Hn
65535
$ ulimit -Sn
65535
Gatlingの設定
次にGatlingの設定も見ていきます。
Gatlingをインストール後、src/test/resources
配下にgatling.conf
があります。
この中で、コネクションを有効活用するためキープアライブを有効化します。
タイムアウト周りについて、タイムアウトエラーを避けることを重視して待っても良いのであれば長い時間で設定します。
パフォーマンスを最大限に引き出すためには、Coreのメモリ周りの設定を調整すれば良いかもしれません。
socket {
#connectTimeout = 10000 # Timeout in millis for establishing a TCP socket
#soKeepAlive = false # if TCP keepalive configured at OS level should be used
}
http {
#pooledConnectionIdleTimeout = 60000 # Timeout in millis for a connection to stay idle in the pool
#requestTimeout = 60000 # Timeout in millis for performing an HTTP request
}
最後に
今回は、Gatlingでの負荷試験を、可能な限り1台で実施するための設定を試してみたことを記事にしました。
どなたかの参考になると幸いです。