JVM性能優化系列-(7) 深刻了解性能優化

JVM.jpg

7. 深刻了解性能優化

7.1 影響系統性能的方方面面

影響系統性能的因素有不少,如下列舉了常見的一些系統性能優化的方向:前端

Screen Shot 2019-12-29 at 4.05.53 PM.png

7.2 經常使用的性能評價和測試指標

響應時間

提交請求和返回該請求的響應之間使用的時間,通常比較關注平均響應時間。git

如:數據庫查詢花費的時間,將字符回顯到終端上花費的時間,訪問 Web 頁面花費的時間;github

併發量

指同一時刻,對服務器有實際交互的請求數。和網站在線用戶數的關聯。面試

吞吐量

對單位時間內完成的工做量(請求)的量度。算法

如:每分鐘的數據庫事務,每秒傳送的文件千字節數,每分鐘的 Web 服務器命中數。數據庫

一般,平均響應時間越短,系統吞吐量越大;平均響應時間越長,系統吞吐量越小。可是,系統吞吐量越大,未必平均響應時間越短。編程

7.3 經常使用的性能優化手段

對於系統的性能調優,整體上從以下三個方面入手:後端

  1. 前端優化
  2. 應用服務性能優化
  3. 存儲性能優化

可是不管怎麼優化,總原則就是:瀏覽器

  • 避免過早優化,優化的前提是基本功能完成且測試經過;
  • 進行系統性能測試,須要經過性能測試來肯定性能,不能主觀臆測;
  • 尋找系統瓶頸,分而治之,逐步優化。

前端優化

  • 瀏覽器/App
  1. 減小請求數;
  2. 使用客戶端緩衝;
  3. 啓用壓縮
  4. 資源文件加載順序
  5. 減小Cookie傳輸
  • CDN加速緩存

  • 反向代理緩存

  • WEB組件分離

應用服務性能優化

1. 緩存

優先考慮使用緩存優化性能。

2. 集羣

Screen Shot 2019-12-29 at 4.25.51 PM.png

3. 異步

  • 異步與同步:關注的是結果消息的通訊機制。
  • 阻塞和非阻塞:關注的是等待結果返回給調用方的狀態。

組合起來有4種狀態。

4. 程序

  • 代碼級別:選擇合適的數據結構、選擇更優的算法、編寫更少的代碼。
  • 併發編程:充分利用CPU多核,儘可能使用線程池,合理設置線程數量,儘可能使用JDK 提供的各類併發框架和工具;實現線程安全的類,避免線程安全問題;同步下減小鎖的競爭:縮小鎖的範圍,減小鎖的粒度,鎖分段,替換獨佔鎖,讀寫鎖,CAS代替鎖,ThreadLocal等。
  • 資源複用:減小開銷很大的系統資源的建立和銷燬。單例模式和池化技術。
  • JVM調優

GC調優的方向:GC的時間夠小,GC的次數夠少

大多數的Java應用不須要GC調優,大部分須要GC調優的,不是參數問題,是代碼問題 GC調優是最後手段。

GC調優的優先級: 第一位:選擇合適的GC回收期 第二位:選擇合適的堆大小 第三位:選擇年輕代在堆中的比重

步驟: 1.監控GC的狀態 2. 分析結果,判斷是否要優化 minGC 時間《 50ms,10s一次 FullGC執行1s一下,頻率10分鐘以上

打印GC日誌:

-XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath -XLogger:logpath -XX:PrintHeapAtGC

存儲性能優化

  • 儘可能使用SSD
  • 定時清理數據或者按數據的性質分開存放
  • 結果集處理

本文由『後端精進之路』原創,首發於博客 teckee.github.io/ , 轉載請註明出處

搜索『後端精進之路』關注公衆號,馬上獲取最新文章和價值2000元的BATJ精品面試課程

後端精進之路.png
相關文章
相關標籤/搜索