注解
EMQ 2.0 消息服務器默認設置,允許最大客戶端連接是512,因為大部分操作系統 ‘ulimit -n’ 限制為1024。
EMQ 消息服務器1.1.3版本,連接壓力測試到130萬線,8核心/32G內存的 CentOS 雲服務器。
操作系統內核參數、TCP 協議棧參數、Erlang 虛擬機參數、EMQ 最大允許連接數設置簡述如下:
Linux 操作系統參數
# 2M - 系統所有進程可打開的文件數量:
sysctl -w fs.file-max=2097152 sysctl -w fs.nr_open=2097152
# 1M - 系統允許當前進程打開的文件數量:
ulimit -n 1048576
TCP 協議棧參數
# backlog - Socket 監聽隊列長度:
sysctl -w net.core.somaxconn=65536
Erlang 虛擬機參數
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 最大允許連接數
emqttd/etc/emq.conf ‘listeners’段落:
## Size of acceptor pool
listener.tcp.external.acceptors = 64 ## Maximum number of concurrent clients listener.tcp.external.max_clients = 1000000
測試客戶端設置
測試客戶端在一個接口上,最多只能創建65000連接:
sysctl -w net.ipv4.ip_local_port_range="500 65535" echo 1000000 > /proc/sys/fs/nr_open
按應用場景測試
MQTT 是一個設計得非常出色的傳輸層協議,在移動消息、物聯網、車聯網、智能硬件甚至能源勘探等領域有着廣泛的應用。1個字節報頭、2個字節心跳、消息 QoS 支持等設計,非常適合在低帶寬、不可靠網絡、嵌入式設備上應用。
不同的應用有不同的系統要求,用戶使用emqttd消息服務器前,可以按自己的應用場景進行測試,而不是簡單的連接壓力測試:
- Android 消息推送: 推送消息廣播測試。
- 移動即時消息應用: 消息收發確認測試。
- 智能硬件應用: 消息的往返時延測試。
- 物聯網數據采集: 並發連接與吞吐測試。
開源 MQTT 客戶端項目
GitHub: https://github.com/emqtt
emqttc | Erlang MQTT客戶端庫 |
emqtt_benchmark | MQTT連接測試工具 |
CocoaMQTT | Swift語言MQTT客戶端庫 |
QMQTT | QT框架MQTT客戶端庫 |
Eclipse Paho: https://www.eclipse.org/paho/
MQTT.org: https://github.com/mqtt/mqtt.github.io/wiki/libraries