EMQ單機壓力測試

EMQ單機壓力測試

測試環境:
VM虛擬機 Ubuntu18.04_64
2G內存2核

工具:
emqtt_bench:https://github.com/emqx/emqtt-bench

準備

  1. Ubuntu安裝EMQ(省略,可參考官網)

  2. 編譯Benchmark Tool
    因此工具是基於Erlang編寫,故編譯源碼需先安裝Erlang環境
    官方要求:Erlang/OTP R21.2+

     經測試使用過高版本Erlang,編譯時會報錯,特別建議大家安裝R21.2版本。
    

    Erlang安裝參考此處

    Erlang安裝好後,編譯源碼:

    在這裏插入圖片描述
    編譯成功後,在當前目錄會生成emqtt_bench

測試

在emqtt_bechmark編譯目錄運行命令

  1. 連接測試:以50ms間隔創建一個客戶端連接服務器,客戶端總數50000

    ./emqtt_bench conn -c 50000 -i 50  -h 120.0.0.60 -p 1883
    
  2. 訂閱測試:以50ms間隔創建一個客戶端訂閱主題bench/%i,客戶端總數50000

    ./emqtt_bench sub -c 50000 -i 50 -t bench/%i -h 120.0.0.60 -p 1883
    
  3. 發佈測試:以50ms間隔創建一個客戶端,客戶端以100ms間隔向主題bench/%i發送數據,客戶端總數50000

    ./emqtt_bench pub -c 50000 -i 50 -I 100 -t bench/%i -h 120.0.0.60 -p 1883
    

經測試,虛擬機可以穩定連接的客戶端約2w

注意測試前需要進行參數調優:


```##  服務器端  ##

cat << EOF >> /etc/sysctl.conf
fs.file-max=2097152 
fs.nr_open=2097152
net.core.somaxconn=32768
net.ipv4.tcp_max_syn_backlog=16384
net.core.netdev_max_backlog=16384
net.ipv4.ip_local_port_range=1000 65535
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.optmem_max=16777216
net.ipv4.tcp_rmem=1024 4096 16777216
net.ipv4.tcp_wmem=1024 4096 16777216
net.nf_conntrack_max=1000000
net.netfilter.nf_conntrack_max=1000000
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
net.ipv4.tcp_max_tw_buckets=1048576
net.ipv4.tcp_fin_timeout = 15
EOF

cat << EOF >>/etc/security/limits.conf
*      soft   nofile      1048576
*      hard   nofile      1048576
EOF

echo DefaultLimitNOFILE=1048576 >>/etc/systemd/system.conf 

cd /etc/emqttd/
cp emq.conf emq.confback
sed -i 's%^node\.process_limit = .*%node.process_limit = 2097152%g' /etc/emqttd/emq.conf
sed -i 's%^node\.max_ports = .*%node.max_ports = 1048576%g' /etc/emqttd/emq.conf
sed -i 's%^listener\.tcp.external\.acceptors = .*%listener.tcp.external.acceptors = 64%g' /etc/emqttd/emq.conf
sed -i 's%^listener\.tcp\.external\.max_clients = .*%listener.tcp.external.max_clients = 1000000%g' /etc/emqttd/emq.conf
 
##  客戶端  ##

#臨時生效
sysctl -w net.ipv4.ip_local_port_range="500 65535"
echo 1000000 > /proc/sys/fs/nr_open
ulimit -n 100000
#持久化
cat << EOF >>/etc/security/limits.conf
*      soft   nofile      100000
*      hard   nofile      100000
EOF

cat << EOF >> /etc/sysctl.conf
fs.nr_open=1000000
net.ipv4.ip_local_port_range=500 65535
EOF

參數調優參考:
https://docs.emqx.io/broker/latest/cn/tune.html#

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章