1. 程式人生 > >基於TSUNG對MQTT進行壓力測試-基礎概念溫習

基於TSUNG對MQTT進行壓力測試-基礎概念溫習

一、TCP報頭部中的SYNFINACK

ACK : TCP協議規定,只有ACK=1時有效,也規定連線建立後所有傳送的報文的ACK必須為1。

SYN(SYNchronization) : 在連線建立時用來同步序號。當SYN=1而ACK=0時,表明這是一個連線請求報文。對方若同意建立連線,則應在響應報文中使SYN=1和ACK=1. 因此,  SYN置1就表示這是一個連線請求或連線接受報文。 

FIN (finis)即完,終結的意思, 用來釋放一個連線。當 FIN = 1 時,表明此報文段的傳送方的資料已經發送完畢,並要求釋放連線。

二、一個TCP連線從開始到斷開的幾個狀態:

 

SYN_RECV表示正在等待處理的請求數;ESTABLISHED表示正常資料傳輸狀態;TIME_WAIT表示處理完畢,等待超時結束的請求數。

狀態:描述

CLOSED:無連線是活動的或正在進行

LISTEN:伺服器在等待進入呼叫

SYN_RECV:一個連線請求已經到達,等待確認

SYN_SENT:應用已經開始,開啟一個連線

ESTABLISHED:正常資料傳輸狀態

FIN_WAIT1:應用說它已經完成

FIN_WAIT2:另一邊已同意釋放

ITMED_WAIT:等待所有分組死掉

CLOSING:兩邊同時嘗試關閉

TIME_WAIT:另一邊已初始化一個釋放

LAST_ACK:等待所有分組死掉

三、TCP的傳送緩衝區和接收緩衝區

TCP協議是作用是用來進行端對端資料傳送的,那麼就會有傳送端和接收端,上篇部落格講了Socket預設是阻塞式的,在作業系統有兩個空間即user space和kernal space。

每個Tcp socket連線在核心中都有一個傳送緩衝區和接收緩衝區,TCP的全雙工的工作模式以及TCP的流量(擁塞)控制便是依賴於這兩個獨立的buffer以及buffer的填充狀態。

單工:只允許甲方向乙方傳送資訊,而乙方不能向甲方傳送 ,如汽車單行道。

半雙工:半雙工就是指一個時間段內只有一個動作發生,甲方可以向乙方傳送資料,乙方也可以向甲方傳送資料,但不能同時進行,如一條窄馬路同一時間只能允許一個車通行。

全雙工:同時允許資料在兩個方向上同時傳輸,它在能力上相當於兩個單工通訊方式的結合。

一個socket的兩端,都會有send和recv兩個方法,如client傳送資料到server,那麼就是客戶端程序呼叫send傳送資料,而send的作用是將資料拷貝進入socket的核心傳送緩衝區之中,然後send便會在上層返回。

也就是說send()方法返回之時,資料不一定會發送到對端即伺服器上去(和write寫檔案有點類似),send()僅僅是把應用層buffer的資料拷貝進socket的核心傳送buffer中,傳送是TCP的事情,和send其實沒有太大關係。

接收緩衝區把資料快取入核心,等待recv()讀取,recv()所做的工作,就是把核心緩衝區中的資料拷貝到應用層使用者的buffer裡面,並返回。若應用程序一直沒有呼叫recv()進行讀取的話,此資料會一直快取在相應socket的接收緩衝區內。對於TCP,如果應用程序一直沒有讀取,接收緩衝區滿了之後,發生的動作是:收端通知發端,接收視窗關閉(win=0)。這個便是滑動視窗的實現。保證TCP套介面接收緩衝區不會溢位,從而保證了TCP是可靠傳輸。因為對方不允許發出超過所通告視窗大小的資料。 這就是TCP的流量控制,如果對方無視視窗大小而發出了超過視窗大小的資料,則接收方TCP將丟棄它。

檢視socket傳送緩衝區大小,cat /proc/sys/net/ipv4/tcp_wmem

四、限制連線數上漲的幾個關鍵因素:

系統埠限制

Linux系統埠為short型別表示,數值上限為65535。假設分配壓測業務可用埠範圍為1024 - 65535,不考慮可能還執行著其它對外連線的服務,真正可用埠也就是64000左右(實際上,一般為了方便計算,一般直接設定為50000)。換言之,即在一臺機器上一個IP,可用同時對外建立64000網路連線。

若是N個可用IP,理論上 64000*N,實際上還需要滿足:

  • 充足記憶體支援
  1. tcp接收/傳送緩衝區不要設定太大,tsung預設分配32K(可以修改成16K,一般夠用了)
  2. 一個粗略估算假設一個使用者佔用記憶體50k1w使用者佔用500M記憶體,假設需要100w使用者

100w/6w = 17IP地址 500m * 100w/1024 = 50G記憶體 伺服器單一IP 承載100萬用戶1臺主機+17臺從機 若單機64G記憶體+17IP可用IP地址 就一臺就能搞定

  • 為多IP的壓測端分配適合的權重,以便承擔更多的終端連線

Linux系統開啟檔案控制代碼限制

系統開啟檔案控制代碼,直接決定了可以同時開啟的網路連線數量,這個需要設定大一些,否則,你可能會在[email protected]檔案中看到error_connect_emfile類似檔案控制代碼不夠使用的警告,建議此值要大於 > N * 64000

修改linux系統引數。vi /etc/security/limits.conf 新增

*       soft    nofile  655350

*       hard    nofile  655350

*       soft    nproc  655350

*       hard    nproc  655350

修改以後儲存,登出當前使用者,重新登入,執行ulimit -a ,ok ,引數生效了:

注:nofile是代表最大檔案開啟數

nproc是作業系統級別對每個使用者建立的程序數的限制

記憶體的影響:

一個網路Socket連線佔用不多,但上萬個或數十萬等就不容小覷了,設定不當會導致記憶體直接成為屏障。

TCP接收、傳送快取

Tsung預設設定的網路Socket傳送接收緩衝區為16KB,一般夠用了。

[[email protected] ~]# cat /proc/sys/net/ipv4/tcp_rmem

4096 87380 4194304

此值會覆蓋Linux系統設定接收、傳送緩衝大小。

粗略的預設值計算,一個網路連線傳送緩衝區 + 接收緩衝區,再加上程序處理連線堆疊佔用,約40K記憶體,為即計算方便,設定建立一個網路連線消費50K記憶體。

先不考慮其它因素,若我們想要從機模擬10W個使用者,那麼當前可用記憶體至少要剩餘:50K * 100000 / 1000K = 5000M = 5G記憶體。針對一般伺服器來講,完全可滿足要求(剩下事情就是要有兩個可用IP了)。

五、伺服器檢視TCP連線數

命令:ss  -tan|awk 'NR>1{++S[$1]}END{for (a in S) print a,S[a]}’

通過上述命令可以統計出TCP連線中處於各個狀態的連線數,在經過Ng代理之後需要真實的連線數需要除以2,因為Client——Nginx——Mqtt其實算是兩個TCP連線。

相關推薦

基於TSUNGMQTT進行壓力測試-基礎概念溫習

一、TCP報頭部中的SYN、FIN、ACK:ACK : TCP協議規定,只有ACK=1時有效,也規定連線建立後所有傳送的報文的ACK必須為1。SYN(SYNchronization) : 在連線建立時用來同步序號。當SYN=1而ACK=0時,表明這是一個連線請求報文。對方若同意建立連線,則應在響應報文中使SY

基於TSUNGMQTT進行壓力測試-測試結果

yum install -y ncurses-devel openssl-devel unixODBC-devel wxWidgets-devel wxGTK3-docs mesa-libGL-devel

【MySQL】【壓測】使用sysbenchMySQL進行壓力測試

usr with sleep library val repos then plot 停止 1.背景 ? 出自percona公司,是一款多線程系統壓測工具,可以根據影響數據庫服務器性能的各種因素來評估系統的性能。例如,可以用來測試文件IO,操作系統調度器,內存分配和傳輸

使用ab網站進行壓力測試

進行 壓力 測試 oca tools ray local too install 1、安裝yum install httpd-tools 2、ab -kc 1000 -n 1000 http://localhost/ab.html 這個指令會使用1000個並發,進行連接

.net core 使用ConcurrentTest元件方法進行壓力測試

工欲善其事,必先利其器!在編寫服務中首先要有一個好的測試工具,在dontecore下效能測試有BenchmarkDotNet,只需要簡單的配置一下就可以對方法的效能進行詳細的測試。但有時候需要對不同併發下看其處理效率和延時統計檢視,如HTTP服務對應著大量的測試工具如ab,bombardier等等。由於找不到

使用Jmeter工具tomcat進行壓力測試(7)

本文主要使用jmeter工具對tomcat8進行壓力測試,並使用java visualVM進行壓測效能監控,通過監控資料調整tomcat引數 步入正題: 首先作業系統已優化完成,java版本為1.8以上,tomcat版本8.0.48,根據自己實際情況而定 使用tomcat預設引數進行壓測 #vi

linux下使用ab工具伺服器進行壓力測試

ab 安裝 yum -y install httpd-tools (centos) 安裝完成後使用ab -v 檢視ab版本確認是否安裝成功 選項 選項 含義 -A auth-username:password 對伺服器提供BASIC認證信任。 使

使用MonkeyAPP進行壓力測試

最近在對新開發的APP進行壓力測試,學習了Monkey。在這裡進行一下總結和記錄。 monkey是手機系統自帶的一個軟體,它存在於adb shell中,對使用者是不可見的,但是可以通過ADB(Android Debug Bridge)進入手機系統裡面,它主要是生成使用者

使用JMeterTomcat進行壓力測試與Tomcat效能調優

一、準備工作。       1、安裝JDK1.6或1.6版本以後的,並配置環境變數。       2、在Apache的官網下載最新的Jmeter,  http://jmeter.apache.org/download_jmeter.cgi,截止目前為止,最新的Jmeter是

用mysqlslapMySQL進行壓力測試

MySQL5.1地的確提供了好多有力的工具來幫助我們DBA進行資料庫管理。現在看一下這個壓力測試工具mysqlslap.關於他的選項手冊上以及--help介紹的很詳細。我解釋一下一些常用的選項。這裡要注意的幾個選項:--concurrency代表併發數量,多個可以用逗號隔開

YCSB MongoDB 進行壓力測試

 執行環境:CentOS7.5 +YCSB 0.16版本+MongoDB 3.6.6 注意: 參考YCSB 0.15.0的版本釋出說明資訊, Tested in previous releases, unchanged in this release中MongoDB支援的版

知己知彼–Aurora進行壓力測試

一、前言 Amazon Aurora 是一種為雲打造並與 MySQL 和 PostgreSQL 相容的關係資料庫,既具有高階商用資料庫的效能和可用性,又具有開源資料庫的簡單性和成本效益。相比起MYSQL, Aurora在只讀副本延遲,可擴充套件性,備份恢復速度以及儲存空間擴充

使用ApacheBench(ab)URL進行壓力測試(HTTP直壓)

ApacheBench(ab)安裝 ubuntu 安裝 apt-get install apache2-utils // 可單獨安裝,與apache2無捆綁關係。若無法安裝,請更新源後重試。 其它系統安裝,自行搜尋。 ApacheBench

使用abweb服務進行壓力測試

服務器 時間限制 pac 0.10 字節 -s 重復 最小 傳輸速率 ab  需要先安裝httpd -A auth-username:密碼 向服務器提供BASIC認證憑證。用戶名和密碼由一個單獨分隔 -c並發 一次執行的多個請求數。默認是一次一個請求。 -C cookie-

利用ab壓力工具服務器進行壓力測試

因此 win request 過大 .exe http cond don bin 假如我們需要對http://letv.com進行壓力測試,指定請求總數為100,並發用戶數為10,我們可以以下面的方式進行測試 $ ab -n 100 -c 10 http://letv

使用abTomcat8.5進行壓力測試

背景 一直不是很清楚tomcat能力大約是個什麼水平,到底算不算web伺服器中的高手,今天決定試試這傢伙的深淺。 恰好了解到apache自帶的ab(apache benchmark)工具可以進行簡單的壓力測試,所以就用它來試試。 流程 先配置tomcat8.5,

使用 WRK 壓力測試工具 ASP.NET Core 的介面進行壓力測試

0. 簡要介紹 WRK 是一款輕量且易用的 HTTP 壓力測試工具,通過該工具我們可以方便地對我們所開發的 WebAPI 專案進行壓力測試,並且針對測試的情況返回結果。 PS:Wrk 並不能針對測試的結果生成動態的圖表,如果有這種需要,可以嘗試使用另一款工具 Vegeta。該專案使用的 Golang 進行編

linux實訓第三天--linux使用ab命令來web網站進行壓力測試/DDOS攻擊

ab -n 100 -c 10 http://127.0.0.1/index.html -n requests     Number of requests to perform     要執行的請求數量 -c concurrenc

使用COSBench工具ceph s3介面進行壓力測試

標籤:des   class   style   log   com   http   it   si   使用   一、COSBench安裝COSBench是Intel團隊基於java開發,對雲端儲存的測試工具,全稱是Cloud object Storage Benc

sysbenchmysql資料庫進行壓力測試

轉載請註明出處:https://blog.csdn.net/qq_30186661/article/details/80224301一、安裝sysbench平臺:ubuntucurl -s https://packagecloud.io/install/repositorie