容量預估/效能壓測思考

zhanlijun發表於2015-06-28

轉載請引用:容量預估/效能壓測思考

1 背景

       隨著業務的快速成長,日訪問量越來越高,除了對功能要求很高以外,對效能要求也越來越高。 在實際工作中,我們往往會被一些問題所困擾。

       1)線上服務容量是多少?效能痛點在哪裡? 可伸縮性(resilience)和可靠性(reliability)怎樣?預先知道了系統的容量,做到心中有數,才能為最終規劃整個執行環境的配置提供有利的依據。

       2)新開發的功能是否滿足效能指標? 重新修改的程式碼會不會帶來效能問題? 對服務或工具的引數修改是否有效果(如jvm引數,mysql或solr配置等)? 如果在上線用前就能進行驗證,那麼不僅能極大降低部署時發生意外的概率,還能為效能優化提供指導。

2 現狀

      為嘗試解決上述問題,我們在多個專案上進行過效能測試,使用過的方法主要分成三類。

方案 具體方式   優點 缺點
人為模擬請求 自己寫程式碼或者使用簡單的工具如httpload等去模擬使用者請求進行測試   操作簡單,能快速的得到cpu、mem、 load、 qps等極限值。 缺少真實使用者互動行為,缺乏真實性
copy線上流量 使用tcpcopy工具實時copy線上流量到某臺機器   操作簡單,是真實線上請求,且對線上服務壓力無影響 需要準備一套跟線上機器配置、依賴一致的獨立環境,同時如果是服用線上的環境的話,一些寫操作的請求被copy會有問題
線上流量切換 直接用線上的機器和環境,通過調整nginx配置引數,逐漸將要做壓測的機器的權重增加,然後觀察該機器各個指標效能   真實生產線流量,能把使用者行為導向壓測伺服器,是最為真實的使用者行為,能夠把一些需要登陸,有使用者互動行為的效能真實的反映出來 因為是用生產系統真實流量來模擬壓測,無法得出最大值,如果閥值設定有誤,也存在一定的風險。此外該效能測試也不能經常進行

3 存在的不足

     儘管我們在效能測試上做過一些嘗試,但還遠遠不夠,存在以下不足。

3.1 效能測試指標和標準尚未完全確立

     不同服務測試指標應該不同,相應的標準也不同,例如接入層服務和後端服務指標是不同的。如果我們能為各個服務制定類似如下的標準,以後再進行效能測試就有了參考依據 隨著服務的發展,這些標準也會隨之相應改動,要求會越來越嚴格。

判斷指標

不通過的標準

超時概率

大於萬分之一

錯誤概率

大於萬分之一

平均響應時間

超過100ms

0.99響應時間

超過200ms

qpm(每分鐘處理的請求量)

小於2w

qpm波動範圍(標準差)

正負3

cpu使用率

平均每核超過75%

負載(load

平均每核超過1.5

jvm記憶體使用率

大於80%

gc平均時間

超過1s

fullgc頻率

頻率高於半小時一次

...

... 

 

 

3.2 效能測試不夠全面

圖1 淘寶效能測試曲線(a點:效能期望值;b點:高於期望,系統資源處於臨界點;c點:高於期望,拐點;d點:超過負載,系統崩潰)

        根據上述壓力變化模型,淘寶網將效能測試分成狹義的4種型別:

       a)效能測試:a點到b點之間的系統效能 

       定義:狹義的效能測試,是指以效能預期目標為前提,對系統不斷施加壓力,驗證系統在資源可接受範圍內,是否能達到效能預期。

       b)負載測試 :b點的系統效能

       定義:狹義的負載測試,是指對系統不斷地增加壓力或增加一定壓力下的持續時間,直到系統的某項或多項效能指標達到極限,例如某種資源已經達到飽和狀態等。

      c)壓力測試:b點到d點之間

      定義:狹義的壓力測試,是指超過安全負載的情況下,對系統不斷施加壓力,是通過確定一個系統的瓶頸或不能接收使用者請求的效能點,來獲得系統能提供的最大服務級別的測試

      d)穩定性測試:a點到b點之間

      定義:狹義的穩定性測試,是指被測試系統在特定硬體、軟體、網路環境條件下,給系統載入一定業務壓力,使系統執行一段較長時間,以此檢測系統是否穩定,一般穩定性測試時間為n*12小時

      我們現在的效能測試還沒有那麼全面,比如沒有進行長時間的穩定性測試,長時間的測試執行可導致程式發生由於記憶體洩露引起的失敗,揭示程式中的隱含的問題或衝突

3.3 效能測試手段缺乏

      線上流量切換方法不能經常執行,copy線上流量目前只能將所有(包括讀和寫)流量拷貝過來,而自己寫程式模擬使用者請求又缺乏真實性。一種思路是自己實現測試程式將前一天的請求重新跑一遍,其核心在於控制請求頻率,使其與之前請求頻率曲線一致,從而達到近似模擬的目的。

3.4. 缺少效能測試自動化工具或平臺

      例如百度有個效能測試平臺,有此平臺後,可以方便地進行效能測試。其可以用於指導程式開發,使得在開發過程不僅關注功能,也關注效能,此外,效能測試納入持續整合,每天出報表,每天都能知道自己服務的處理能力。

 

相關文章