性能測試

概念

基本名詞

1、併發,對被測代碼的同時請求
2、TPS,Transactions Per Second,每秒處理的事務數目。一個事務是指向服務器發送的一個請求然後服務器做出反應的過程。在jmeter中,大多數情況下,Throughput吞吐率被認爲等於TPS,公式:Throughput=samples(總事務數)/duration(持續時間)=TPS
3、QPS:全名 Queries Per Second,意思是“每秒查詢率”,是一臺服務器每秒能夠響應的查詢次數。與TPS不同的是,一個事務在分佈式處理中,可能會對應有多個請求。對單個接口壓測,且這個接口內部不再去請求其它接口,那麼tps=qps,否則,tps≠qps。
4、響應時間:從客戶端在發送請求開始,收到服務器響應後結束,以此計算一個事務的響應時間。統計全部事務的響應時間,取平均
5、負載:一般理解爲服務器的CPU、內存,IO等資源的使用率。負載是一個平均進程數,統計處於 runnable state(可運行狀態) 和 uninterrupttable state(不可中斷狀態)的進程數;可運行狀態是指正在使用cpu,或者正在等待使用cpu;不可中斷狀態是進程正在等待一些IO的請求,諸如磁盤IO/網絡IO。

策略

壓力測試(StressTesting)

概念:通過模擬實際應用的軟硬件環境及用戶使用過程的系統負荷,長時間或超大負荷地運行測試軟件,來測試被測系統的性能、可靠性、穩定性等。壓力測試需要確定一個系統的瓶頸或者不能接收的性能點,來獲得系統能提供的最大的服務級別。通俗地講,壓力測試是爲了發現在什麼條件下您的應用程序的性能會變得不可接受

負載測試(Load Testing)

概念,負載測試有時也會被稱爲“容量測試”或者“耐久性測試/持久性測試”,給被測系統加上它所能操作的最大任務數,其目標是確定並確保系統在超出最大預期工作量的情況下仍能正常運行。對於WEB應用來講,負載則是併發用戶或者HTTP連接的數量。負載測試通過測試系統在資源超負荷情況下的表現,以發現設計上的錯誤或驗證系統的負載能力。在這種測試中,將使測試對象承擔不同的工作量,以評測和評估測試對象在不同工作量條件下的性能行爲,以及持續正常運行的能力。

性能測試(PerformanceTesting)

概念,性能測試的目的是排除系統的性能瓶頸,是一個非常小心受控的測量分析過程:“運行負載試驗->測度性能->調試系統”,併爲迴歸測試建立一個基準。在理想的情況下,被測應用在這個時候已經是足夠穩定,所以這個過程得以順利進行。性能測試還有另一個目標就是建立一組被測系統的基準數據。應用在網絡上的性能測試重點是利用成熟先進的自動化技術進行網絡應用性能監控、網絡應用性能分析和網絡預測。

工具

Jmeter

JMeter作爲一款廣爲流傳的開源壓測產品,最初被設計用於Web應用測試,如今JMeter可以用於測試靜態和動態資源,例如靜態文件、Java 小服務程序、CGI 腳本、Java 對象、數據庫、FTP服務器等等,還能對服務器、網絡或對象模擬巨大的負載,通過不同壓力類別測試它們的強度和分析整體性能。另外,JMeter能夠對應用程序做功能測試和迴歸測試,通過創建帶有斷言的腳本來驗證你的程序返回了你期望的結果。爲了最大限度的靈活性,JMeter允許使用正則表達式創建斷言。

JMeter的特點包括對HTTP、FTP服務器、數據庫進行壓力測試和性能測試;完全的可移植性;完全 Swing和輕量組件支持包;完全多線程;緩存和離線分析/回放測試結果;可鏈接的取樣器;具有提供動態輸入到測試的功能;支持腳本編程的取樣器等。在設計階段,JMeter能夠充當HTTP PROXY(代理)來記錄瀏覽器的HTTP請求,也可以記錄Apache等WebServer的log文件來重現HTTP流量,並在測試運行時以此爲依據設置重複次數和併發度(線程數)來進行壓測。

壓測實戰分享之JMeter工具使用初探
官網鏈接

LoadRunner

LoadRunner是一種預測系統行爲和性能的負載測試工具,通過模擬實際用戶的操作行爲進行實時性能監測,來幫助測試人員更快的查找和發現問題。LoadRunner適用於各種體系架構,能支持廣泛的協議和技術,爲測試提供特殊的解決方案。企業通過LoadRunner能最大限度地縮短測試時間,優化性能並加速應用系統的發佈週期。

LoadRunner提供了3大主要功能模塊:VirtualUser Generator(用於錄製性能測試腳本),LoadRunner Controller(用於創建、運行和監控場景),LoadRunner Analysis(用於分析性能測試結果)既可以作爲獨立的工具完成各自的功能,又可以作爲LoadRunner的一部分彼此銜接,與其他模塊共同完成軟件性能的整體測試
LoadRunner官網
性能測試入門——LoadRunner使用初探

調優

經驗

負載升高的原因

1、大量數據請求時,包括搜索時全表掃描、以及大量的導出數據等。這種情況下一般大量的讀請求讓IO成爲瓶頸,導致其他進程也處理緩慢,因此隨着時間的增加負載就會升高
2、事務未提交,一般一些業務處理系統,耦合關係強,如訂單的出庫和庫存的關係,一般是需要原子性操作,這個時候一般會使用事務來進行控制,但是不幸出現事務未提交的情況,會導致大量資源被鎖,其他請求處於長時間等待的情況,這種情況也會導致負載升高
3、死鎖,mysql的死鎖檢測以及回滾都會有一定的時間,加之事務對資源的獨佔,出現死鎖會出現短暫的擁堵現象,同時負載的短時間內上升,不過後面繼續會下降。但是死鎖很頻繁的情況下,負載也會一直較高
4、內存不足時,mysql服務器是相當耗費內存的,如果內存不足導致交換分區長時間使用的話,也會讓機器負載升高
5、其他導致的一些IO問題,如磁盤損壞以及磁盤空間不足

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章