測試網絡的帶寬指令_單機千萬級MQTT服務器測試報告

f80c54897a5f5f6aaef6c4cb3a5e542e.png

目標:測試創建1000萬客戶端連接到Coolpy7 MQTT服務器端,服務器操作系統 Linux(任意一款發行版服務器版本)。分別在兩臺硬件一樣的服務器,其中一臺用于服務器端運行,另一臺用于創建千萬客戶端連接客戶端機器。在硬件一致的情況下請確保網絡設備達到相關測試要求,例如萬兆網絡等等。

541057cd0c8c819005ecb3aecaee0778.png

服務端系統參數調優(Linux)

修改文件/etc/sysctl.conf,配置網絡參數。

net.ipv4.tcp_wmem = 4096 87380 4161536

net.ipv4.tcp_rmem = 4096 87380 4161536

net.ipv4.tcp_mem = 786432 2097152 3145728

fs.file-max = 12000000 #一千兩百萬

執行/sbin/sysctl -p即時生效。

echo 12000000 > /proc/sys/fs/nr_open #需root權限

/etc/systemd/system.conf 設置服務最大文件句柄數:

DefaultLimitNOFILE=12000000

修改/etc/security/limits.conf文件

* hard nofile 12000000

* soft nofile 12000000

* soft nproc 12000000

* hard nproc 12000000

需重啟系統生效,服務器操作系統參數調優完成。關于啟動CoolPy7服務器端程序請參閱本章中的《程序安裝》小節

客戶端的參數調優(Linux)

根據TCP/IP協議,由于端口是16位整數,也就只能是0到 65535,而0到1023是預留端口,所以能分配的端口只是1024到65534,也就是64511個。一臺機器一個IP只能創建六萬多個長連接。 要想達到更多的客戶端連接,可以用更多的機器或者網卡,也可以使用虛擬IP來實現,比如下面的命令增加了19個IP地址,其中一個給服務器用,其它18個給client,這樣可以產生18 * 60000 = 1080000個連接。本測試用例需要增加到一千萬或以上的足夠IP。

9c15f4cdf1807233622970ac44805716.png

以上指令查看到網卡名稱為 eth0

eea6a46ed8e7bb0ca266e5f57d02120d.png

以上指令操作增加虛擬IP,添加完成后通過 ifconfig 指令查看確認所有虛擬IP最已列出。

修改/etc/sysctl.conf文件:

fs.file-max = 12000000

fs.nr_open = 12000000

net.ipv4.ip_local_port_range = 1024 65535

執行/sbin/sysctl -p即時生效。

echo 12000000 > /proc/sys/fs/nr_open #需root權限

/etc/security/limits.conf配置

* soft nofile 12000000

* hard nofile 12000000

* soft nproc 12000000

* hard nproc 12000000

# 下載測試工具

git clone https://github.com/Coolpy7/coolpy7_benchmark.git

# 進入bin文件夾

cd bin

# 啟動Coolpy7靜連接測試工具

# 參數url: Coolpy7服務端所在服務器ip地址,默認端口號:1883

# 參數workers: 需要創建的客戶端連接數量

# 參數cid: mqtt連接客戶端(ClientId)前綴,工具會自動以cid+WorkersId作為連接clientid值

# 參數topic: 連接成功后訂閱的topic主題(支持以%i取得workersid:例: mytopic%i)不進行訂閱測試填寫null字符串

# 參數keepalive: 連接ping時間間隔

# 參數clear: mqtt客戶端連接的clearsession屬性,當設置為true時重連時不能再次訂閱qos0以上的主題

# 以下例示建立連接到192.168.200.238所在的Coolpy7服務器端,并創建400萬個MQTT客戶端連接

./go_build_cp7_bench_sub_go_linux -workers=4000000 -cid=tqy -topic=null -qos=0 -url=tcp://192.168.200.238:1883 -keepalive=60000s -clear=true

2fa98ced0594b5d688a4a86539cc9c89.png

測試時需時刻關注服務器端網絡資源使用情況,測試數據顯示在高連接數下ping/pong狀態下已占用極大的網絡帶寬,需根據當前設備的硬件資源合理設置最大連接數量以保證系統的穩定長期運行

5d244f40f49a17ea696420dd57b66a96.png

服務器端啟動并host于1883 TCP端口

b1f93c5d2d3d8d32b8ac7fe34638c5fb.gif

通過HTOP工具監測Coolpy7(連接時)硬件資源占用情況

e9983a719aaeaf1658b14e511bb46c6f.gif

通過NLOAD工具監測Coolpy7(連接時)網絡資源占用情況

73a331b2d5d85e81021a39bc2a5f825e.png

使用Coolpy_benchmark工具測試連接400萬連接

  1. 測試工具開源地址:https://github.com/Coolpy7/coolpy7_benchmark
  2. 工具會以1000為單位打印連接信息
  3. 工具啟動后會一直創建參數指定的客戶端連接數

按應用場景測試

MQTT 是一個設計得非常出色的傳輸層協議,在移動消息、物聯網、車聯網、智能硬件甚至能源勘探等領域有著廣泛的應用。1個字節報頭、2個字節心跳、消息 QoS 支持等設計,非常適合在低帶寬、不可靠網絡、嵌入式設備上應用。

不同的應用有不同的系統要求,用戶使用Coolpy7消息服務器前,可以按自己的應用場景進行測試,而不是簡單的連接壓力測試:

  1. Android 消息推送: 推送消息廣播測試。
  2. 移動即時消息應用: 消息收發確認測試。
  3. 智能硬件應用: 消息的往返時延測試。
  4. 物聯網數據采集: 并發連接與吞吐測試。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533377.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533377.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533377.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python郵箱爆破_Python在線爆破郵箱賬號密碼測試代碼(親測可用)

dic 字典格式如下(mail.txt) :usernamegmail.com:passwordusernamegmail.com:passwordusernamegmail.com:password以此類推,切記保存成utf-8編碼格式。放置在當前腳本目錄,也可自己定義修改。支持ssl https /imap協議。# version 3.4.0# codingUTF-8# ti…

查看redis aof內存_Redis持久化問題定位與優化技巧

今天主要分享繼Redis持久化方式RDB、AOF之后的一些常用的Redis問題定位于優化方式。這里主要CPU、內存、磁盤在三個維度去分析問題!Fork操作當Redis做RDB或AOF重寫時,一個必不可少的操作就是執行fork操作創建子進程,對于大多數操作系統來說fo…

mysql新增陣列df_DF學Mysql(三)——索引操作

概要:數據庫對象索引其實與書的目錄非常相似,主要是為了提高從表中檢索數據的速度。由于數據存儲在數據庫表中,所以索引是創建在數據庫表對象上的,由表中的一個字段或多個字段生成的鍵組成,這些鍵存儲在數據結構(B-樹或…

python本地瀏覽器注入js_PyQt5內嵌瀏覽器注入JavaScript腳本實現自動化操作的代碼實例...

概要應同學邀請,演示如何使用 PyQt5 內嵌瀏覽器瀏覽網頁,并注入 Javascript 腳本實現自動化操作。下面測試的是一個廉價機票預訂網站(http://www.flyscoot.com/),關鍵點如下使用 QWebEngineView 加載網頁,并顯示進度。在默認配置(…

python裝好了怎么啟動車_【填空題】Python安裝好后,可以直接在CMD命令行下輸入( )命令, 可啟動交互式編程,提示窗口如下:...

傾斜巖層的產狀要素是用巖層層面的()。A.傾角B.走向C.范圍D.傾向E.表面積采用深層攪拌法進行地基加固處理,其適用條件為()。A.砂礫石松軟地基B.松散砂地基C.黏土軟弱地基根據《建筑工程建筑面積計算規則》,下列關于建筑物雨篷結構的建筑面積計算&#xf…

windows設置mysql使用率_Windows下配置Mysql

這里說的配置Mysql,是在安裝時進行的,請先查看:Windows平臺下安裝Mysql緊接上文,安裝完成后將配置選項打上對勾,按下“Finish”,出現下面的界面,這里有一個很好的功能,mysql配置向導…

mysql 云無憂ps教程_華為云數據庫MySQL一鍵開通讀寫分離,無憂應對企業業務高峰情景...

業務大促,訂單暴增,網站流量暴漲幾倍,數據庫服務器容量又要扛不住了,眼睜睜看著生意白白溜走,再苦逼也無法解決,“腫”么辦?別擔心,一鍵開通讀寫分離,而且只需一個連接地…

mysql實體監聽器_GitHub - langjiangit/spring-boot-starter-mysql-binlog: mysql的binlog監聽器

mysql binlog監聽器前置操作1.查看mysql是否開啟binlogshow variables like log_bin;2.查看是否使用row格式的binlogshow variables like binlog_format;3.如果以上都不是請修改mysql的配置文件添加或者修改如下內容#配置binlog存放路徑log-binE://mysql//binlog//mysql-bin#bi…

python 基因序列提取_科學網—簡單的Python腳本提取對應位置基因序列(fasta文件) - 王彬忠的博文...

最近,用Python腳本提取,在基因號已知,位置已知條件下,相對應位置的基因序列時發現,這樣很簡單但是很實用的腳本,在網上卻比較難找。而且,能被找到的腳本,相對于具有初級編程能力的人…

python不能安裝在中文_無法在Python上安裝表

我一直收到錯誤Command "python setup.py egg_info" failed with error code 1 in C:\Users\HP\AppData\Local\Temp\pip-install-sv33cp8y\tables\當嘗試使用^{pr2}$我試過了pip install --upgrade setuptools還有很多其他的東西,但還是不能讓它發揮作用。…

python是強定義語言嗎_python是強類型語言嗎

強弱是對類型而言的。強類型,你有一個值之后這個值是什么類型是確定,比如n1,n的類型是確定的(字符串),因此你不能在Python做n3 mn1運算。而弱類型就不是這樣的,值的類型可以在需要的時候再去確定,比如PHP里…

mysql給字段添加描述_用sql 語句給字段添加描述

用sql 語句給字段添加描述IF not exists(SELECT * FROM ::fn_listextendedproperty (NULL, user, dbo, table, strTableName, column, strColumnName))BEGINexec sp_addextendedpropertyMS_Description, strColumnDesc , user, dbo, table,strTableName, column, strColumnName…

深入java核心_Java核心(五)深入理解BIO、NIO、AIO

導讀:本文你將獲取到:同/異步 阻/非阻塞的性能區別;BIO、NIO、AIO 的區別;理解和實現 NIO 操作 Socket 時的多路復用;同時掌握 IO 最底層最核心的操作技巧。BIO、NIO、AIO 的區別是什么?同/異步、阻/非阻塞…

java反射 獲取參數類型_Java反射帶參構造創建對象時如何自動轉換參數類型

需求是這樣的:有一個類,類的路徑知道,例如是com.xx.xx.xx其中有不同類型的成員變量(個數未知),有對應的setter和getter方法,有一個無參構造和一個全參構造。現在需要用反射機制...需求是這樣的:有一個類&am…

java的樂趣_分享java帶來的快樂

2013年9月17日#2011年7月18日#function reportError(sMessage, sUrl, sLine) {var str "";str " 錯誤信息:" sMessage "\n";str " 錯誤地址:" sUrl "\n";str " 錯誤行數:" sLine "\n";str &…

java arraylist底層實現原理_ArrayList和LinkedList底層原理

ArrayList和LinkedList都是List的實現類,是在日常開發中經常被使用到的兩個集合,我們來結合源碼看下兩個集合的不同之處。先來看下ArrayList的源碼:// 默認的初始化大小private static final int DEFAULT_CAPACITY 10;ArrayList的底層數數組…

java ee jaas_java-ee – Tomcat-Jaas – 如何檢索主題?

i knew that and it works, but I need to retrieve subject to get also roleprincipal不幸的是,它在Java EE中的工作方式不同. JAAS主題只是一個“主要包”,其中哪些代表用戶/調用者主體和/或角色主體根本不是標準化的.每個其他容器在這里做不同的事情. Javadoc for Tomcat’…

java jive歌詞_Java Jive_Manhattan Transfer with Phil Collins_高音質在線試聽_Java Jive歌詞|歌曲下載_酷狗音樂...

Manhattan Transfer with Phil Collins - Java Jive[id:$00000000][ar:曼哈頓行者爵士][ti:Java Jive (LP Version)][by:][hash:99bf26cac4ad13e15925a56eb724027f][al:][sign:][qq:][total:0][offset:0][00:00.05]The Manhattan Transfer - Java Jive[00:10.57]I …

java 3_Java 3 (Java的數據類型)

Java的數據類型主要內容:1Java數據類型的分類2.8種基本數據類型3.理解引用類型的特點一、什么是數據類型?計算機語言將數據按性質進行分類,每一類稱為一種數據類型;數據類型定義了數據的性質、取值范圍、存儲方式、對數據所能進行…

java快捷鍵 --_Java中的快捷方式“或分配”(| =)運算符

如果是關于可讀性,我就有了將測試數據與測試邏輯分離的概念。代碼示例:// declare dataDataType [] dataToTest new DataType[] {defaultStock,defaultWholesale,defaultRetail,defaultDelivery}// define logicboolean checkIfAnyNegative(DataType []…