EMQ 壓測問題


一、單台服務器最高只能跑2W多一點
問題描述
一直使用benchmark測試單台EMQ都沒有超過3W鏈接數

一個獨立的外網IP只能提供最多6W的端口號,但每個TCP需要分配一個指定的端口號。所以理論上講一台EMQ的服務器最多能跑6W鏈接數。
關於一直報”shutdown,eaddrnotavail”是因為測試的客戶機端口號分配不足,並不是服務端無法分配端口號。

單台EMQ測試
1)、使用客戶機數據5台
2)、最大鏈接數在76565
3)、異常情況是應用程序掛掉
erlang.log.4日志

===== ALIVE Sun Aug 26 14:56:54 CST 2018 
[os_mon] cpu supervisor port (cpu_sup): Erlang has closed 
[os_mon] memory supervisor port (memsup): Erlang has closed

 

查看端口號使用命令

#查看端口號使用命令 

netstat -npta | grep <端口號> 


#查看端口號使用數量 

netstat -npta |grep <端口號> | wc -l

  

 

Linux 系統參數優化

修改系統所有進程可打開的文件數量

sysctl -w fs.file-max=2097152
sysctl -w fs.nr_open=2097152

 vi /etc/sysctl.conf

fs.file-max = 2097152
fs.nr_open = 2097152

 

設置服務最大文件句柄數

vim /etc/systemd/system.conf

DefaultLimitNOFILE=1048576


持久化設置允許用戶/進程打開文件句柄數:

ulimit -n 1048576  

> vim /etc/security/limits.conf

* soft nofile 1048576
* hard nofile 1048576

可用’*’號表示修改所有用戶的限制;soft或hard指定要修改軟限制還是硬限制;1048576則指定了想要修改的新的限制值,即最大打開文件數(請注意軟限制值要小於或等於硬限制)。

TCP 協議棧網絡參數

> vi /etc/sysctl.conf

### backlog - Socket 監聽隊列長度:
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'

## TCP Socket 讀寫 Buffer 設置:
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

#sysctl -w net.ipv4.tcp_mem='16777216 16777216 16777216'
net.ipv4.tcp_rmem='1024 4096 16777216'
net.ipv4.tcp_wmem='1024 4096 16777216'

## TCP 連接追蹤設置:
net.nf_conntrack_max=1000000
net.netfilter.nf_conntrack_max=1000000
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30

## FIN-WAIT-2 Socket 超時設置:
net.ipv4.tcp_fin_timeout = 15
## TIME-WAIT Socket 最大數量、回收與重用設置:
net.ipv4.tcp_max_tw_buckets=1048576

# 注意: 不建議開啟該設置,NAT模式下可能引起連接RST
# net.ipv4.tcp_tw_recycle = 1
# net.ipv4.tcp_tw_reuse = 1

 Erlang 虛擬機參數

> vim /usr/local/emqttd/etc/emq.conf
## Erlang Process Limit
node.process_limit = 2097152
## Sets the maximum number of simultaneously existing ports for this system
node.max_ports = 1048576

## EMQ 最大允許連接數
## Size of acceptor pool
listener.tcp.external.acceptors = 64
## Maximum number of concurrent clients(以1G內存比5W進行配置)
listener.tcp.external.max_clients = 1000000

重啟emq之后可以在Dashboard看到如下顯示:

 

調整系統參數並且開始壓測

cd emqtt_benchmark
sysctl -w net.ipv4.ip_local_port_range="500 65535"
echo 1000000 > /proc/sys/fs/nr_open
ulimit -n 1000000
./emqtt_bench_sub -h 192.168.2.111 -c 32219 -i 1 -t bench /%i -q 2

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM