私は負荷テストの初心者ですが、Amazon で多くのことを調べてテスト システムを構成しました。このシステムは、Websocket サーバー、Play フレームワーク、およびいくつかの負荷テスト マシンで構成されています。TsungとGatlingなどの負荷テスト ツールを試してみました. 私のテスト シナリオ: 1 万人を超えるユーザーを作成し、それぞれがサーバーに接続し、毎秒メッセージの送信を開始します。Linux を調整して、10 万を超える接続を処理できるようにしました。ガトリング用に JAVA_OPTS を試してみました (メモリと ParallelGC の使用量を追加しました)。サーバー側で akka をいじって、100 ~ 300 のディスパッチャ スレッドを処理します。サーバー マシン用に 60 GB RAM と 10 GBit チャネルを備えた 36 個の vCPU マシンを注文しました。しかし、その結果、同じ Tsung と Gatling が 1 台のマシンから毎秒 10,000 近くのメッセージを送信しました (160 バイト未満のテキスト メッセージだけを送信しました)。誰か説明してくれませんか。1 万人を超える同時ユーザー (1 秒あたり 1 メッセージ) に到達できないのはなぜですか。そして、私は何を間違っていますか?
actor {
default-dispatcher = {
fork-join-executor {
throughput = 1000
parallelism-factor = 36.0
parallelism-max = 154
}
}
}
JAVA_OPTS="-Xmx3800m -Xms3800m -Xmn2g -XX:+UseParallelGC -XX:ParallelGCThreads=20"
Linux 構成
sudo ulimits -n > 999999 sudo vim /etc/sysctl.conf
# General gigabit tuning
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216
#
# # This gives the kernel more memory for TCP
# # which you need with many (100k+) open socket connections
net.ipv4.tcp_mem = 4096 65536 16777216
#
# # Backlog
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_syncookies = 1
# Controls IP packet forwarding
net.ipv4.ip_forward = 0
# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0
# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1
# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 0
# Disable netfilter on bridges.
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
# Controls the default maxmimum size of a mesage queue
kernel.msgmnb = 65535
# Controls the maximum size of a message, in bytes
kernel.msgmax = 65535
# Controls the maximum shared segment size, in bytes
kernel.shmmax = 68719476736
# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_orphan_retries = 5
fs.file-max = 999999
net.ipv4.tcp_max_orphans = 819200
net.core.somaxconn = 65535
net.ipv4.tcp_congestion_control = cubic
5 台のクライアント マシンでテストしたところ、サーバー側の on play フレームワークは 50,000 ユーザーからの 1 秒あたり 50,000 メッセージを処理できることがわかりました。このような構成で。問題は、1 台のクライアント マシンが 10,000 ユーザーから 10,000 mps を超えて送信できないことです。おそらく誰かが、10,000 ユーザーから 10,000 mps 以上を送信できる他の負荷テスト ツールを知っているでしょう。