一、性能分析的常用手段
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加速,讓響應數據里用戶更近,回避緩解網絡瓶頸