效能測試新手常犯錯誤總結(七) 你需要調優麼

2021-07-10 03:16:30 字數 2065 閱讀 3883



測試人員喜歡在得到某個達不到預期的效能結果後,進行一下「調優」。

pm有時也會布置任務,測試完成後「調乙個優」。

一些人貌似有了這種觀念:調優才使效能測試有意義、效能測試的目的就是調優、做調優才能顯出測試人員的水平……

隨著經驗的增長和對效能更深入的認識,我越來越體會到調優是乙個複雜的過程,不是動動嘴、改倆個引數這麼簡單,只有通過科學的方法和紮實的技能才能做好,以至於我使用這個詞的頻率越來越低,因為不敢輕易說出口……

在你再一次調優之前,先考慮以下幾個問題:

為什麼需要調優

如果問起這個問題,得到的回答通常是「因為效能不夠好」,那麼接下來我會問效能不好體現在**?你要調什麼?希望得到什麼結果?

如果你不能足夠準確的回答第乙個「體現在**」的問題,後兩個也一定沒有答案,所謂的調優自然也無從談起。而這第乙個問題的答案其實也就是定位的過程。

舉乙個小例子。如果我已經發現資料庫較慢,通過進一步監控又發現了乙個cache的spinlock contention這個指標超過了正常的範圍。那麼我會猜測可能是這塊快取的爭用導致了資料庫的執行狀況變差,針對這個現象我知道可以通過將cache分割槽來減少爭用,改變配置後再重新測試和監控,這就可以算是一次調優的嘗試。

但如果你只停留在資料庫慢的這個層面上,又怎麼能進行調優呢?

所以,需要調優的乙個前提是「定位到問題」或者「發現了瓶頸」。

又有人說了,沒有問題為什麼不能調優?沒有問題,我們可以讓系統變得更好!

但是,所謂的「更好」如何衡量?「好」到什麼程度時不需要繼續「好」了呢?

請記住,瓶頸永遠存在,消滅了乙個,就必然會引入另乙個。

調優的目標也不是「沒有瓶頸」,而是系統在其所承受的壓力下,效能表現足夠好,那就夠了!

「足夠好」其實也就是沒有問題。

調優調什麼

理解了上面的內容,這個問題的答案就很明顯,調優必然是針對具體的問題或瓶頸。

而問題和瓶頸,指的是「效能不好」這個現象的直接原因,而不是那些不痛不癢的其他因素。

好比奧拓比奧迪跑得慢,最主要的問題在於發動機(不懂車,隨便一說),而不是奧拓車的外型不夠流線、輪胎抓地不夠好……

如果把精力放在改善外型、輪胎這些方面上,確實會讓奧拓變得更「快」,但是從原問題(比奧迪慢)上來看,這都是沒有意義的。

至於如何準確的定位出問題,針對問題又如何下手,這就是技術能力,只能依靠不斷的學習、長期的積累了。

不過依然存在一些比較科學的工作方法,可以讓你盡快的抓住重點。如在系統執行正常時採集乙份足夠完整的效能指標作為基準,當出現狀況時再次採集乙份相同的指標,對比其中的差異,從差異處入手。

經常見到這種人,一聽到資料庫慢,直接加大記憶體分配、加快取、加連線數、加大各種資源配置……典型的胡亂「調優」。

調優的層次

同乙個問題,可能可以從多個方面進行處理。

乙個慢sql,優化的方式可能是加個索引、繫結快取、改寫sql、表分割槽、甚至是公升級硬體。

資源爭用問題,既可以從配置層面進行優化、減小爭用發生的機率,又可以從程式的實現方式上做改變、從源頭上避免爭用。

假設多種處理方式,都可以滿足期望,那麼應該從哪個層面下手呢?

這就需要考慮到工作量、效果、隱患等多種因素,當然也不排除幾種優化共同作用。

調優有效麼

這是乙個工作方法是否科學的問題。

每一次試驗,都需要能夠驗證是否有效。有效的保留,無效的則復原。

除了對原問題的驗證,還必須確認對其他部分是否產生了***。理論上這就需要在每一次調優嘗試後,進行一次足夠全面的複測。

否則,很容易出現「拆東牆補西牆」的問題。

記住以下幾個要點:

● 每次只改變一處。

● 每次改變後進行複測。有效的保留,無效的復原。

● 不斷的迭代,直到達到預期。

只有真正理解調優的目的,並按照科學的方法行動,你的努力才會體現出價值。

效能測試新手常犯錯誤總結(六) 效能監控

資料庫 或中介軟體 非常慢了,如何監控它的效能 你想得到什麼效能指標?就是 內部的效能指標 收到效能測試人員這樣的問題後,通常會發生上面的對話。我的觀點是,準確的說出你想要做什麼,比你會不會做更重要。那麼對於效能測試人員來說,效能監控 這門必修課,該從何下手呢?監控什麼 如果我給你乙個黑盒子,告訴你...

電子郵件營銷常犯錯誤總結

郵件營銷已被證明是不可或缺的營銷工具,它能讓您的產品和服務資訊直接傳送到客戶手中,而掌握了正確的郵件營銷策略,能讓您的營銷效果獲得更大的提公升。但在平時的電子郵件營銷中,營銷人員可能會犯以下幾點錯誤 目標物件不準確 花大量時間找預客戶的郵寄位址和電子郵件位址,在並不了解目標物件做什麼的情況下,盲目傳...

Python之def使用常犯錯誤總結

定義乙個重量轉換函式,輸入值為以 g 為單位,返回以 kg 的結果。個人常犯錯誤如下 1 缺少冒號 def weight converter g weight g 100 return str weight kg print weight converter 5005 報錯資訊 syntaxerro...