如何正確做 Web端壓力測試?
一個完整的壓力測試需要關注三個方面:如何正確產生壓力、如何定位瓶頸、如何預估系統的承載能力。
(1) 如何產生壓力:產生壓力的方法有很多,通常可以寫指令碼產生壓力機器人對伺服器進行發包和收包操作,也可以使用現有的工具(像jmeter、LoadRunner這些),所以說產生壓力其實並不難,難點在於產生的壓力是不是真實地反映了實際使用者的操作場景。
舉個例子來說,對遊戲來說單純的併發登陸場景在整個線上環境中的佔比可能並不大(新開服等特殊情況除外),相反“登陸-開始戰鬥-結束戰鬥”、不同使用者執行不同動作這種“混合模式”佔了更大的比重。所以如何從實際環境中提煉出具體的場景比重,並且把這種比重轉化成實際壓力是一個重要的關注點。
(2) 產生壓力之後,通常我們可以拿到TPS、響應時延等效能資料,那麼如何定位效能問題呢? TPS、響應時延只能告訴你伺服器是否存在問題,但不能幫助你定位問題。這些表面背後是整個後臺處理邏輯綜合作用的結果,這時候可以先關注系統的CPU、記憶體、IO、網路,對比在tps、時延達到瓶頸時這些系統資料的情況,確定性能問題是系統哪一部分造成的,然後再回到程式碼的邏輯中逐個優化這些點。
(3) 當伺服器的整體效能就可以相對穩定下來,這時候就需要對自己伺服器的承載能力有一個預估,通過產生真實壓力、對比系統資料,大致可以對單套系統的處理能力有個真實的評價,然後結合業務規模配置伺服器數量。
總的來說,通過產生真實壓力來發現問題、結合系統性能來解決問題 。
一個完整的壓力測試需要關注三個方面:如何正確產生壓力、如何定位瓶頸、如何預估系統的承載能力。
(1) 如何產生壓力:產生壓力的方法有很多,通常可以寫指令碼產生壓力機器人對伺服器進行發包和收包操作,也可以使用現有的工具(像jmeter、LoadRunner這些),所以說產生壓力其實並不難,難點在於產生的壓力是不是真實地反映了實際使用者的操作場景。
舉個例子來說,對遊戲來說單純的併發登陸場景在整個線上環境中的佔比可能並不大(新開服等特殊情況除外),相反“登陸-開始戰鬥-結束戰鬥”、不同使用者執行不同動作這種“混合模式”佔了更大的比重。所以如何從實際環境中提煉出具體的場景比重,並且把這種比重轉化成實際壓力是一個重要的關注點。
(2) 產生壓力之後,通常我們可以拿到TPS、響應時延等效能資料,那麼如何定位效能問題呢? TPS、響應時延只能告訴你伺服器是否存在問題,但不能幫助你定位問題。這些表面背後是整個後臺處理邏輯綜合作用的結果,這時候可以先關注系統的CPU、記憶體、IO、網路,對比在tps、時延達到瓶頸時這些系統資料的情況,確定性能問題是系統哪一部分造成的,然後再回到程式碼的邏輯中逐個優化這些點。
(3) 當伺服器的整體效能就可以相對穩定下來,這時候就需要對自己伺服器的承載能力有一個預估,通過產生真實壓力、對比系統資料,大致可以對單套系統的處理能力有個真實的評價,然後結合業務規模配置伺服器數量。
總的來說,通過產生真實壓力來發現問題、結合系統性能來解決問題 。