【性能測試】性能分析方法


一、性能分析的常用手段

1、空間換時間,利用內存緩存從磁盤上取出的數據,CPU可以直接訪問內存,從而比從磁盤讀取數據更高的效率。

2、時間換空間,當空間成為瓶頸的時候,切開數據分批次處理,用更少空間完成任務的處理。

3、分而治之,把任務切分,分開執行。

4、異步處理,業務鏈路上有任務時間消耗較長,可以拆分業務,減少阻塞影響,常見的異步處理有MQ(消息隊列)。

5、並行,用多個進程或者線程同時處理業務,縮短業務處理時間。

6、離用戶更近一點,比如CDN技術,把用戶請求的靜態資源放在離用戶更近的地方。

二、性能分析方法

1、自低而上:通過監控硬件及操作系統性能指標來分析性能問題。

2、自頂而下:通過負載生成來觀測被測試系統的性能,比如響應時間、吞吐量。

三、性能分析流程

1、檢查RT:響應時間

2、檢查TPS:每秒完成事務數

3、檢查負載機資源消耗,是否有性能問題:CPU使用率

4、檢查web服務器的資源消耗:

  1)檢查CPU的使用率;

  2)檢查內存的使用情況;

  3)檢查磁盤使用情況;

  4)檢查占用的帶寬;

  5)分析web頁面的響應組成

5、檢查中間件的配置問題

6、數據庫服務器資源消耗分析:

  1)檢查CPU的使用率;

  2)檢查內存的使用情況;

  3)檢查磁盤使用情況;

  4)數據庫監控

7、SQL分析:

  1)定位不合理的sql占比;

  2)索引是否正常應用;

  3)檢查共享sql是否合理范圍;

  4)檢查解析是否合理;

  5)檢查數據ER結構是否合理;

  6)檢查數據熱點問題;

  7)檢查數據分布是否合理;

  8)檢查碎片整理

四、系統性能關注點

  1、系統資源

  (1)CPU過高:

    1)計算量大,比如運算、連接查詢、數據統計;

    2)非空閑等待,同一資源被不同線程請求,而此資源又需要保證一致性,只能前一個釋放后一個再訪問,導致等待;

    3)過多的系統調用,系統調用操作系統所提供的程序接口;

    4)過多的中斷,中斷是CPU用來響應請求的機制。

  (2)內存吃緊,解決辦法就是加內存,或者減少不必要的調用。

  (3)磁盤繁忙,數據讀寫頻繁。

  (4)高並發造成網絡擁堵。

  2、操作系統

  (1)系統負載:load average(CPU的任務隊列長度)

  (2)系統連接數的控制,操作系統為了安全會限制外部及內部建立TCP連接的數量,在服務器環境需要提供大量的服務,此時需要修改這個TCP連接數的限制。

  (3)緩存:操作系統存在緩存機制,內存不夠時,有虛擬內存,哲學都是提高IO效率的有效手段。

  3、數據庫

  系統性能的好壞很大部分是由數據庫系統、應用數據庫設計及如何使用數據庫來決定的,簡單地把浙西應用系統分為OLTP(聯機事務處理系統)與OLAP(聯機分析處理系統)兩種,以下為OLTP和OLAP的粗略比較:

  (1)對於OLTP類型的常規辦法是:

    1)優化業務過程,盡量減少數據請求,不管是讀還是寫

    2)優化sql語句提交效率

  (2)對於OLAP類型的常規辦法是:

    1)預處理,比如物化、多維數據,先把數據放在后台統計,生成一個較小的數據集,然后程序對物化后的數據進行訪問減小系統壓力。

    2)分而治之,比如並行查詢

    3)優化語句提高效率

  (3)OLTP類型關注點:

    1)慢查詢

    2)大事務

    3)死鎖

    4)DB Time高

    5)磁盤IO等待時間

    6)對於一些熱點數據,可以置入內存,提高響應數據,常見的緩存如memcache、redis等,Hibernate這種ORM模型的框架也提供二級緩存支撐。

4、中間件

  J2EE架構的程序多數運行在Tomcat、Jboss、WebLogic、Jetty等中間件上。

  (1)JVM:中間件是運行在JVM之上的,我需要監控jvm堆內存使用情況。包括GC頻率,線程狀態等。Full GC操作是對堆空間進行全面回收,所以頻繁得Full GC會影響響應時間。監控線程運行狀態主要關注Blocked狀態線程,此狀態說明當前線程運行相對較慢,長時間的Blocked可能是因為線程阻塞,甚至造成死鎖。

  (2)Thread pool:中間件在接收用戶請求時為了節省建立連接、銷毀連接的資源消耗,設計建立線程池,需要監控其使用情況,一般超過使用率時,可以考慮加大連接池數量。

  (3)DB Connections pool:為了節省程序與DB建立連接、釋放連接的資源消耗,設計數據庫連接池,一般超過使用率時,可以考慮加大連接池數量。

  Thread pool和DB Connections pool,我們都可以通過netstat命令統計其連接數。

5、應用程序

  不同的架構存在不同的性能短板,抽象層次越高(低層封裝程度越高),開發效率越高,對開發人員的要求越低,性能風險越高。往往性能風險都會集中在這一層次。我們常見的SSH架構是MVC模型。展現層view復制展現的內容,Controller負責請求接收,前台邏輯跳轉;Model層實現業務邏輯,返回數據;數據層負責與數據庫打交道。

6、web服務

關注點:

  (1)頁面的Size:動態數據、CSS、JS、圖片等的大小

  (2)隱藏的,無用的數據傳輸

web性能優化方向:

  (1)頁面靜態化,先進行靜態化然后提供訪問,減少DB的負擔

  (2)減少頁面的size

  (3)砍掉無用的請求,無用的數據傳輸

  (4)對數據做異步處理,事情分為多步,先完成優先級高的事情

  (5)智能DNS及CDN加速,讓響應數據里用戶更近,回避緩解網絡瓶頸


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM