一、壓力測試
壓力測試考察當前軟硬件環境下系統所能承受的最大負荷並幫助找出系統瓶頸所在。壓測都是為了系統在線上的處理能力和穩定性維持在一個標准范圍內,做到心中有數。
使用壓力測試,我們有希望找到很多種用其他測試方法更難發現的錯誤。有兩種錯誤類型是:內存泄漏,並發與同步。
有效的壓力測試系統將應用以下這些關鍵條件:重復,並發,量級,隨機變化。
二、性能指標
1,響應時間(Response Time: RT)
響應時間指用戶從客戶端發起一個請求開始,到客戶端接收到從服務器端返回的響應結束,整個過程所耗費的時間。
最大響應時間(Max Response Time) 指用戶發出請求或者指令到系統做出反應(響應)的最大時間。
最少響應時間(Mininum ResponseTime) 指用戶發出請求或者指令到系統做出反應(響應)的最少時間。
90%響應時間(90% Response Time) 是指所有用戶的響應時間進行排序,第 90%的響應時間。
2,吞吐量
吞吐量即每秒鍾系統能夠處理的請求數、任務數。
HPS(Hits Per Second) :每秒點擊次數,單位是次/秒。
TPS(Transaction per Second):系統每秒處理交易數,單位是筆/秒。
QPS(Query per Second):系統每秒處理查詢次數,單位是次/秒。
對於互聯網業務中,如果某些業務有且僅有一個請求連接,那么 TPS=QPS=HPS,一般情況下用 TPS 來衡量整個業務流程,用 QPS 來衡量接口查詢次數,用 HPS 來表示對服務器單擊請求。無論 TPS、QPS、HPS,此指標是衡量系統處理能力非常重要的指標,越大越好,根據經驗,一般情況下:
金融行業:1000TPS~50000TPS,不包括互聯網化的活動
保險行業:100TPS~100000TPS,不包括互聯網化的活動
制造行業:10TPS~5000TPS
互聯網電子商務:10000TPS~1000000TPS
互聯網中型網站:1000TPS~50000TPS
互聯網小型網站:500TPS~10000TPS
3,錯誤率
錯誤率指一批請求中結果出錯的請求所占比例。
三、JMeter
Apache JMeter 是 Apache 組織基於 Java 開發的壓力測試工具,用於對軟件做壓力測試。JMeter 最初被設計用於 Web 應用測試,但后來擴展到了其他測試領域,可用於測試靜態和動態資源,如靜態文件、Java 小服務程序、CGI 腳本、Java 對象、數據庫和 FTP 服務器等等。JMeter 可對服務器、網絡或對象模擬巨大的負載,在不同壓力類別下測試它們的強度和分析整體性能。另外,JMeter 能夠對應用程序做功能/回歸測試,通過創建帶有斷言的腳本來驗證程序是否返回了期望結果。為了最大限度的靈活性,JMeter 允許使用正則表達式創建斷言。
1,下載JMeter

2,修改軟件顯示語言
3,添加線程組
4,配置測試參數
線程數:虛擬用戶數。一個虛擬用戶占用一個進程或線程。設置多少虛擬用戶數在這里也就是設置多少個線程數。
Ramp-Up Period(in seconds)准備時長:設置的虛擬用戶數需要多長時間全部啟動。如果線程數為 10,准備時長為 2,那么需要 2 秒鍾啟動 10 個線程,也就是每秒鍾啟動 5 個線程。
循環次數:每個線程發送請求的次數。如果線程數為 10,循環次數為 100,那么每個線程發送 100 次請求。總請求數為 10*100=1000 。如果勾選了“永遠”,那么所有線程會一直發送請求,一到選擇停止運行腳本。
Delay Thread creation until needed:直到需要時延遲線程的創建。
調度器:設置線程組啟動的開始時間和結束時間(配置調度器時,需要勾選循環次數為永遠)
持續時間(秒):測試持續時間,會覆蓋結束時間
啟動延遲(秒):測試延遲啟動時間,會覆蓋啟動時間
啟動時間:測試啟動時間,啟動延遲會覆蓋它。當啟動時間已過,手動只需測試時當前時間也會覆蓋它。
結束時間:測試結束時間,持續時間會覆蓋它。
5,添加HTTP請求

6,配置測試目標參數
7,添加監聽器(用於獲取測試結果)
8,啟動測試
首次測試會提示是否保存測試樣例,一般測試選不保存即可。
9,分析測試結果

有錯誤率同開發確認,確定是否允許錯誤的發生或者錯誤率允許在多大的范圍內;
Throughput 吞吐量每秒請求的數大於並發數,則可以慢慢的往上面增加;若在壓測的機器性能很好的情況下,出現吞吐量小於並發數,說明並發數不能再增加了,可以慢慢的往下減,找到最佳的並發數;
壓測結束,登陸相應的 web 服務器查看 CPU 等性能指標,進行數據的分析;
最大的 tps,不斷的增加並發數,加到 tps 達到一定值開始出現下降,那么那個值就是最大的 tps。
最大的並發數:最大的並發數和最大的 tps 是不同的概率,一般不斷增加並發數,達到一個值后,服務器出現請求超時,則可認為該值為最大的並發數。
壓測過程出現性能瓶頸,若壓力機任務管理器查看到的 cpu、網絡和 cpu 都正常,未達到 90%以上,則可以說明服務器有問題,壓力機沒有問題。
影響性能考慮點包括:數據庫、應用程序、中間件(tomact、Nginx)、網絡和操作系統等方面,首先考慮自己的應用屬於 CPU 密集型還是 IO 密集型。
四、JMeter Address Already in use 錯誤解決
當我們想進行一段時間的壓測時,會出現JMeter端口異常
十幾秒后,發現異常
這是windows 本身提供的端口訪問機制的問題。Windows 提供給 TCP/IP 鏈接的端口為 1024-5000,並且要四分鍾來循環回收他們。就導致我們在短時間內跑大量的請求時將端口占滿了。
解決辦法:
用 regedit 命令打開注冊表,在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 下,
右擊 parameters,添加一個新的 DWORD,名字為 MaxUserPort,然后雙擊 MaxUserPort,輸入數值數據為 65534,基數選擇十進制,再新建一個:TCPTimedWaitDelay:30。
如果是分布式運行的話,控制機器和負載機器都需要這樣操作,修改配置完畢之后記得重啟機器才會生效。