高併發壓力測試
一、Introduction
對於小微企業網站在自主推出某些活動時,可能導致網站產生高併發訪問的情況。針對這種情況採用臨時租用雲伺服器是有價效比的應對措施,比如,使用彈性雲。這種租用服務有的按照訪問流量計費。為了計算出大概的預算,需要根據推算的訪問量做併發壓力測試。
二、壓力測試方法
一般,使用apache自帶的ab.exe。ab.exe最高支援併發量不高於1000次/秒。對於提交表單或者讀取cookie中資料的情景,原理都是提交一段html協議的字串。獲取到提交表單時的html協議資料然後讓ab.exe發這個協議可以模擬提交表單資料。
php中的步驟:
抓取提交表單時提交的html協議。
在提交表單向下執行前,讓程式die。
為了完成所有人的下單,在程式碼中註釋掉清空購物車的程式碼。
開啟瀏覽器的firebug。
在網頁中執行提交表單,然後在firebug的Network資訊欄看到抓取的html。
在這個html的頭資訊中,請求頭中有cookie資訊,form data中有表單資料。
建立一個使用者存放表單資料的檔案,內容為form data中的資料,格式為get提交時的形式:key=value&key=value&key=value,比如:name=下單測試& province=北京& city=東城區。
將程式碼中的為了獲取html而使用的die去掉,使用ab.exe,輸入測試資訊,
ab.exe -c 20 -n 20 -C "pgv_pvi=4387399680;PHPSESSID=37qknulookfad61iivpbqnb9i5" -p D:/002php/test1/eshop/post_data.txt -T "application/x-www-form-urlencoded" http://www.php2.com/eshop/index.php/Home/Order/add.html
-c 併發量,訪問pc數
-n 總的訪問數
-C 請求中cookie資訊,以""括住資料
-p form資料,存放到檔案中
-T 以post提交,以""括住資料
使用ab.exe測試返回的結果中,time taken foe tests記錄了測試總耗時,根據總的請求量可以計算出伺服器每秒可以處理的併發量,返回結果中的requests per second記錄了秒併發處理量。
一般伺服器中處理使用了框架搭建的網站的處理類似秒殺的併發處理能力不會太高,除了加伺服器、租伺服器使用彈性雲的解決方案,也可以通過避開秒殺中真實下單連線資料處理的步驟,而是採用發號碼的演算法,凡是搶到號碼的可以後續實際下單,從而疏解秒殺中真實下單的高併發。