1 怎樣的效能測試結果才是有效的

1.1 錯誤觀點

效能測試工具運行一定數量用戶都能成功,則表示該伺服器能支援這麼多用戶數。這是錯誤的。

解答:

A. 因為一次有效的測試結果,不只用戶都運行成功,同時需要保證瀏覽一個頁面或一次交易的回應時間在合理範圍。“2-5-8原則”,簡單說,就是當用戶瀏覽一個頁面或一次交易能夠在2秒以內得到回應時,會感覺系統的回應很快;當用戶在2-5秒之間得到回應時,會感覺系統的回應速度還可以;當用戶在5-8秒以內得到回應時,會感覺系統的回應速度很慢,但是還可以接受;而當用戶在超過8秒後仍然無法得到回應時,會感覺系統糟透了,或者認為 系統已經失去回應,而選擇離開這個Web站點,或者發起第二次瀏覽請求。

B. 測試場景不一定模擬了真實的實務場景,因為瀏覽器是並發多線程多TCP完成一個頁面的,而測試工具基本都是1,2個線程;對伺服器的壓力是不一樣的,真實環境的TCP壓力是效能測試工具虛擬環境的幾倍。

名 詞 解 釋 :伺服器(Server)
是指能向網路用戶提供特定服務的軟體和硬體。這個伺服器的定義包含了以下兩個方面的內容:一方面..more

2 影響WEB伺服器效能指標的因素有哪些

為什麼效能測試工具,需要提供事件(頁面或交易、全腳本)指標、TCP連接、存取量、伺服器資源監控、請求數/回應數。

  1.  硬體資源:如CPU、記憶體、網卡存取量、I/O能力、SWAP交換能力
  2.  線程數:這裡介紹JAVA的WEB伺服器,預設每線程佔用的記憶體為2M,而32為系統JAVA進程(如tomcat、JBoss)佔得空間只有2G(一般比這個小),因此線程數有限制;64為無限制線程,但CPU要跟得上
  3.  TCP連接數:作業系統的TCP連接數理論值一般很大,作業系統對TCP連接設置有預設值(怎麼配置,可以網上搜尋,這裡不介紹);但實際測試中TCP連接在幾百,就出現測試的回應時間很長。抓包分析,原來是三次握手的SYN包伺服器不及時回應,導致SYN重傳(3秒後,9秒後)。
  4. 如果SYN丟了,則會重發,但是第一次是3秒後,第2次是在9秒後,如果重發才收到的SYN_ACK,則導致TCP連接超長,從而導致實務回應時間延長。
  5.  回應時間:伺服器回應時間小,用戶體驗才好,在大量用戶並發的情況下,HTTP回應時間在用戶忍受度下才是有效的,一般採用“2-5-8原則”。
  6.  軟體本身語法效能演算法:這個不做介紹,如較差的算演法、查詢資料庫時間長等等。

3 測試人員經常遇到的一些常見問題及解答

3.1為什麼使用瀏覽器瀏覽頁面回應很快,1-2秒就完成;而使用測試工具卻需要10幾秒,甚至幾十秒才跑完腳本

解答:

A. 這是由於瀏覽器瀏覽頁面回應是並發的,同時並發多個線程(多個Socket),而效能測試工具基本是串行發送請求的。如果一個頁面有100個資源(CSS、HTML、JS、圖片),需要發送100個HTTP請求,如果使用6個線程(瀏覽器),則每個大概請求14個HTTP;如果使用一個線程(測試工具),則需要請求100個,時間當然大很多。下圖為chrome瀏覽器調試工具顯示的並發情況

B. 另外瀏覽器具有緩存功能,如果之前瀏覽了www.qq.com,會把一些圖片緩存在瀏覽器臨時目錄,下次請求時發送的HTTP請求會帶上If-Match或Etag等頭域,WEB伺服器判斷資源沒改變則會304回應,而不是回200 OK,這樣減少資源的傳輸,所以時間就小。而有些測試工具是不攜帶這些頭域(包括Loadrunner),因此回的回應是200 OK。所以測試人員預設真實測試時,可以考慮部分有緩存,部分沒緩存。

3.2效能測試工具是怎麼模擬WEB虛擬用戶

A. 錄製

使用瀏覽器進行正常實務操作,效能測試工具錄製下HTTP請求訊息。一般需要記錄URL與頭域、內容、回應碼。雖然不同的效能測試工具錄製方式不一樣(如loadrunner採用Hook,JMeter採用代理或badbody,kylinPET採用網卡抓包與代理),但都能實現錄製正常實務的 HTTP請求。

測試工具最好能錄製出緩存頭域,即If-Match或Etag,loadrunner好像不支援錄製緩存頭域。

B.模擬用戶

根據錄製的腳本發送HTTP請求與接收回應,發送前替換參數(實現多用戶不同參數值)、接收時關聯參數(從接收的回應消息獲取參數值,如Cookie、JSessionID)

下面簡單列舉使用過的效能測試工具是如何模擬的(工具運行一個用戶,然後使用wireshark抓包分析得到的結論):

  • Loadrunner:根據錄製腳本發送HTTP請求,如果HTTP請求包括內嵌資源(如圖片、CSS、JS),會啟動第二個線程執行內嵌資源,即Loadrunner支援同時兩個線程兩個TCP連接。
  • kylinPET(國產):可通過配置設置一個線程或者多個線程並發發送HTTP請求,多個線程並發及TCP連接數跟瀏覽器行為一樣。
  • JMeter:只有一個線程,一個TCP連接
  • 其他工具:本人沒用過,請用過的兄弟姐妹可以補充下。通過wireshark抓包分析。

3.3怎樣才能測試出WEB伺服器能支援多少真實用戶,怎樣的伺服器調優參數才合理

解答:

這需要效能測試工具可以模擬出真實用戶的行為,包括HTTP請求數、每用戶並發線程與TCP連接數、思考時間、有無緩存。

為什麼需要模擬真實用戶的線程數與TCP連接數呢,上面提到過,WEB伺服器的線程數與TCP連接數往往很低,這不是提高硬體就能輕鬆解決的,這也是伺服器調優比較複雜的配置。

因此,只有盡最大能力模擬真實用戶(瀏覽器或其它WEB客戶端,可能不同瀏覽器的並發線程與TCP數都不一樣)的行為的測試場景,測試結果才最真實,伺服器調優才最有意義。

4 怎樣才能測試系統支援多少用戶

4.1 模擬真實用戶的行為

只有模擬用戶一樣的行為才可以系統支援的測試用戶數有效,因此需要模擬一樣的並發數、TCP連接數、甚至可以是HTTP請求的時間間隔。用戶可以是瀏覽器、智能手機、智能機頂盒,測試工具模擬他們一樣的行為才是最有效的測試。

4.2 測試結果數據在合理範圍

4.2.1 用戶統計

成功數、失敗數、每秒線上數、最大線上數,通過這些指標分析此次測試結果支援的用戶數、用戶最大數

4.2.2 點擊率

每秒平均HTTP請求數、回應數。分析系統的處理能力

4.2.3 事件

事件成功、失敗、時間,事件一般是整個腳本運行時間、或者一個頁面或一個交易,通過結果分析,得出每個事物的時間是否合理,符合“2-5-8”原則,如果測試結果顯示事物時間非常大,則表示系統支援不了此次測試的用戶,因為用戶的回應時間太大(像火車訂票一樣,太多用戶導致回應時間長,用戶無法忍受,則認為這個系統爛)。

當然,還需要查看事件的百分比,分析90%、80%、70%、60%的事件時間是否在合理範圍。

4.2.4 TCP連接訊息

TCP連接成功數、失敗數、TCP三次握手時間。因為此次測試結果可能是由於伺服器系統或網路的TCP的丟包與重傳才導致延時大的。如果是伺服器的原因,伺服器收到TCP的SYN而不處理,可以通過調試伺服器的TCP配置來優化。

怎麼才知道是伺服器的問題呢,這個需要效能測試工具能給出TCP連接時間(當前瞭解只有kylinPET可以支援),如果顯示超過3秒,這時需要檢查是網路還是伺服器問題,可以在伺服器端抓包(tcpdump或wireshark)然後分析TCP的SYN訊息(個數、時間)

4.2.5 資源佔用

伺服器的CPU、記憶體、帶寬、I/O是不是已經不足,導致系統上不去是哪個原因,根據原因進行調優或升級。

測試時需要考慮效能測試工具的CPU佔用率,如果效能測試工具佔用CPU很高,此次測試可能瓶頸是在工具,而導致測試結果是無效的。

名 詞 解 釋 :JavaScript
一種高階程式語言,通過解釋執行,是一門動態型別,物件導向(基於原型)的直譯語言。它已經由ECMA(歐洲電腦製造商協會)通過ECMAScript實作語言的標準化..more

Related Posts

專欄文摘

確保安全的伺服器管理經驗參考

電子商務的興起,使的很多中小企業都擁有了自己的伺服器。對內用來建立局域 Read more...

專欄文摘

亞洲遊戲官網設計實戰過程經驗分享

引言: 提到橫版格鬥的網路遊戲,大家可能最熟悉的就是中國騰訊代理的2D Read more...

專欄文摘

如何預先做好網站資料庫的安全防護機制

先分3點從全局來看 對作業系統的安全需求:防止對DBMS的非法訪問和修 Read more...