Linux做施压机的最大线程数,关于性能测试的几个要点
幾個定義
性能測試(Performance Test)
通常收集所有和測試有關的所有性能,通常被不同人在不同場合下進行使用。測試軟件在系統中的運行性能,度量系統與預定義目標的差距。
關注點:how much和how fast
負載測試(Load Test)
負載測試是一種性能測試,指數據在超負荷環境中運行,程序是否能夠承擔。通過逐步增加系統負載,確定在滿足性能指標的情況下,系統所能承受的最大負載量。
關注點:how much
壓力測試(Stress Test)
壓力測試是一種高負載下的負載測試,也就是說被系統處于一個負載的情況,再繼續對他進行加壓,形成雙重負載,知道系統崩潰,并關注崩潰后系統的恢復能力,以前再加壓的一個過程,看看系統到底是否已經被徹底破壞掉了。
有個很形象的說法就是:你能夠承擔100千克的重量,而且也能走,但是你能否承擔100千克的重量行走1個月。
外部的負載叫壓力,內部的壓力叫負載。負載注重關注內部的以及系統自身一些情況;而壓力更關注系統外部的表象.
性能測試模型
性能測試的執行過程是由輕到重,逐漸對系統施壓。通常用戶最關心的性能指標包括:響應時間、吞吐量、資源利用率和最大用戶數。我們可以將這張圖分成3個區域,即:輕負載區域、重負載區域和負載失效區域。
· 輕負載區域
在這個區域您可以看到隨著虛擬用戶數量的增加,系統資源利用率和吞吐量也隨之增加,而響應時間沒有特別明顯的變化;
·重負載區域
在這個區域您可以發現隨著虛擬用戶數量的增加,系統資源利用率隨之緩慢增加,吞吐量開始也緩慢增加,隨著虛擬用戶數量的增長,資源利用率保持相對的穩定(滿足系統資源利用率指標),吞吐量也基本保持平穩,后續則略有降低,但幅度不大,響應時間會有相對較大幅度的增長;
·負載失效區域
在這個區域系統資源利用率隨之增加并達到飽和,如CPU利用率達到95%甚至100%,并長時間保持該狀態,而吞吐量急劇下降和響應時間大幅度增長(即:出現拐點)。
·兩個交界點
在輕負載區域和重負載區域交界處的用戶數,我們稱為"最佳用戶數"。而重負載區域和負載失效區域交界處的用戶數則稱為"最大用戶數"。
當系統的負載等于最佳用戶數時,系統的整體效率最高,系統資源利用率適中,用戶請求能夠得到快速響應;
當系統負載處于最佳用戶數和最大用戶數之間時,系統可以繼續工作,但是響應時間開始變長,系統資源利用率較高,并持續保持該狀態,如果負載一直持續,將最終會導致少量用戶無法忍受而放棄;
而當系統負載大于最大用戶數時,將會導致較多用戶因無法忍受超長的等待而放棄使用系統,有時甚至會出現系統崩潰,而無法響應用戶請求的情況發生。
并發用戶數
相對并發用戶數(用戶視角)
即線用戶數,在一個時間段內,與服務器進行了交互、對服務器產生了壓力的用戶的數量。這個時間段,可以是一天,也可以是一個小時。
通常像ab、wrk等并發工具設定的并發數,就是指的這個并發數,比如在JMeter中,如果將某個線程組的線程數設置為100,那是不是對于這個類型的請求,并發量就是100。從宏觀的角度,這樣理解也是對的,就好比請了100個人,每個人獨立地完成一連串的工作,確實是100個在并行。但是對于服務器感受到的壓力,可能就不是100了。
這里所謂的100個并行對于服務端而言并不是嚴格的全部并行,因為每個虛擬用戶執行的節奏是獨立。假設這個操作需要3個請求完成,那么很有可能出現這樣的情況:某個虛擬用戶還在等待第一個請求的響應,但是另一個虛擬用戶已經收到了第一個請求的響應并發起了第二個請求。那么對于服務端而言,在某一個時刻,無論是對于請求1還是請求2,并行度都沒有到100。這個模型比較類似于圖中右邊部分所示的模型。理解這個模型對于并行的理解非常重要。
這里的差異在于宏觀上的并行還是嚴格意義上的并行,比如就某個請求的嚴格意義上的并行或許可以通過TCP連接的保持數來看。通過“netstat|grep ESTABLISH|wc-l”命令獲得保持連接狀態的TCP請求數量。也就是下面的絕對并發用戶數。
并發與并行是相關的概念,但是也有很多細節上的差異。并發意味著兩個或更多的任務正在取得進展,即使它們不是同時執行的。例如,可以用時間片的方式實現這一點,每個任務在時間片內執行一小部分,并與其它任務的切片混合執行。如并發收集器。并行的出現使任務實現了真正的同時執行。
絕對并發用戶數(服務器視角)
主要是針對某一個操作進行測試,即多個用戶同一時刻發起相同請求。
圖中,每一個顏色的線段代表一種操作。在任意一個時刻,服務器都知道它有10個事務需要處理,這10個事務也是有10個用戶產生的。但它不知道的是,整個時間段內的所有事務,是由多少個用戶與系統交互而產生的。時刻1,10個當前事務是由10個用戶發起的。時刻2,依然是10個正在進行的事務,但可能是完全不同的10個人發起的。在這段時間內,服務器每一個時刻都在處理10個事務,但是參與了這個交互過程(對服務器產生壓力)的人可能會達到上百個,也可能只有最開始的10個。那么,對于服務器來說,壓力是什么呢?顯然只是每時刻這10個同時處理的事務。
Think Time
在進行相對并發用戶數的測算時,think time的設置會影響測試的結果。設想這樣的一個場景,一個真實的用戶在某個電商網站上購物,一個簡化的流程可能如下: 1)進入首頁 2)搜索一個商品 3)查看商品詳情 4)加入購物車 5)提交訂單 6)完成支付 基于上面的討論我們可以構造一系列JMeter請求,放在一個線程組里面。 如果我們要測試針對這樣的用戶,我們的系統可以支持多少人同時來購物。假設我們已經考慮了用戶登錄賬號和購買商品的參數化問題,是否可以直接將線程組的數值設置到一個較大的數值,然后并發執行呢?
這樣可以執行起來,但是有一個很大的問題。在于真實用戶和腳本的不同。腳本如果是基于前面方法錄制的,兩個請求的執行時間之前是沒有任何其他停頓的,其間隔只是依賴于上一個服務的響應時間和測試機發起請求所需的時間。但是顯然真實的用戶不是機器,他們在做上面每一個步驟的時候都有一個思考的時間,這也是Think Time這個詞的意義來源。
當然,這個思考時間也是泛指,包括了用戶操作的時間,比如進入首頁后,用戶需要在搜索框中輸入想購買商品的關鍵詞,打開輸入法并輸入相關的詞可能也需要少則幾秒鐘的時間,搜索結果出來之后用戶需要瀏覽和選擇,找到感興趣的商品并點擊查看詳情,后面的步驟也是類似。 試想一下,對比請求連續執行和每個步驟間加入模擬真實用戶的Think Time之后,對于同一個系統,能支持的同時在線購物人數必定會有絕大的差異,而有Think Time的做法顯然更接近真實情況。
準備工作
不同的機器、操作系統、web服務器以及相關參數等的不同,也會影響性能測試的結果。有必要在測試前對參數進行一下配置。
參考做一個正確的性能測試以及高負載系統,網絡參數調整進行調優。這里列一下操作系統的幾個重要參數。
fs.file-max = 999999
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.ip_local_port_range = 1024 ? ?61000
net.ipv4.tcp_rmem = 4096 32768 262142
net.ipv4.tcp_wmem = 4096 32768 262142
net.core.netdev_max_backlog = 8096
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn.backlog=1024
· file-max:這個參數表示進程(比如一個worker進程)可以同時打開的最大句柄數,這個參數直接限制最大并發連接數,需根據實際情況配置。
·?tcp_tw_reuse:這個參數設置為1,表示允許將TIME-WAIT狀態的socket重新用于新的TCP連接,這對于服務器來說很有意義,因為服務器上總會有大量TIME-WAIT狀態的連接。 - tcp_keepalive_time:這個參數表示當keepalive啟用時,TCP發送keepalive消息的頻度。默認是2小時,若將其設置得小一些,可以更快地清理無效的連接。
·?tcp_fin_timeout:這個參數表示當服務器主動關閉連接時,socket保持在FIN-WAIT-2狀態的最大時間。
·?tcp_max_tw_buckets:這個參數表示操作系統允許TIME_WAIT套接字數量的最大值,如果超過這個數字,TIME_WAIT套接字將立刻被清除并打印警告信息。該參數默認為180000,過多的TIME_WAIT套接字會使Web服務器變慢。
·?tcp_max_syn_backlog:這個參數表示TCP三次握手建立階段接收SYN請求隊列的最大長度,默認為1024,將其設置得大一些可以使出現Nginx繁忙來不及accept新連接的情況時,Linux不至于丟失客戶端發起的連接請求。
·?ip_local_port_range:這個參數定義了在UDP和TCP連接中本地(不包括連接的遠端)端口的取值范圍。
·?net.ipv4.tcp_rmem:這個參數定義了TCP接收緩存(用于TCP接收滑動窗口)的最小值、默認值、最大值。
·?net.ipv4.tcp_wmem:這個參數定義了TCP發送緩存(用于TCP發送滑動窗口)的最小值、默認值、最大值。
·?netdev_max_backlog:當網卡接收數據包的速度大于內核處理的速度時,會有一個隊列保存這些數據包。這個參數表示該隊列的最大值。
·?rmem_default:這個參數表示內核套接字接收緩存區默認的大小。
·?wmem_default:這個參數表示內核套接字發送緩存區默認的大小。
·?rmem_max:這個參數表示內核套接字接收緩存區的最大大小。
·?wmem_max:這個參數表示內核套接字發送緩存區的最大大小。
·?tcp_syncookies:該參數與性能無關,用于解決TCP的SYN攻擊。
21/212>
總結
以上是生活随笔為你收集整理的Linux做施压机的最大线程数,关于性能测试的几个要点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: h5弹框滑动 ios_微信 iOS 版更
- 下一篇: php在線評論,php在線生成pdf筆記