java性能調優

全面的性能調優

  1. 編寫更好的算法
  2. 編寫更少的代碼
  3. 過早優化 過早考慮優化是所有噩夢的根源。應該編寫清晰、直接、易讀和易理解的代碼。
  4. 數據庫可能是瓶頸
  5. 常見的優化 積少成多地改進性能
    原則:
    1. 藉助性能分析來優化代碼,注重性能分析中最耗時的操作
    2. 新代碼比機器配置更可能引入性能問題,機器配置比JVM或操作系統更容易引入性能問題。
    3. 爲應用中最常用的操作編寫簡單算法

許多情況下,JVM只佔整體性能的一小部分;需要對java所在的環境進行整體系統調優,數據庫和其他後臺運行系統性能的重要性不亞於JVM。

性能測試方法


性能測試原則:
1. 測試真實應用 : 應該在產品實際使用的環境中進行性能測試

  1. 微基準測試 : 用來測試微小代碼單元的性能。
    1. 必須使用被測的結果
    2. 不要包括無關的操作
    3. 必須輸入合理的參數
  2. 宏基準測試: 測試應用自身,以及它所用到的外部資源
  3. 介基準測試: 測量某方面性能的基準測試,但仍然要執行大量代碼。
  1. 理解批處理流逝時間、吞吐量和響應時間
    1. 批處理流逝時間: 看它完成任務花了多少時間
    2. 吞吐量: 基於一段時間內所能完成的工作量; TPS(每秒事務量)、RPS(每秒請求數)、OPS(每秒操作次數)
    3. 響應時間: 從客戶端發送請求至收到相應之間的流逝時間。
  2. 用統計方法應對性能的變化: 性能測試的結果會隨時間而變
  3. 儘早頻繁測試
    1. 自動化一切
    2. 測試一切
    3. 在真實系統上運行

Java性能調優工具箱


操作系統的工具和分析

系統自帶基本監控工具: linux: sarm vmstat, iostat\ prstat window: typeperf

CPU使用率

通常CPU使用率可以分爲兩類:用戶態時間(cpu執行應用代碼所佔時間比)和系統態時間(CPU執行內核代碼所佔時間比)。
調優的目的: 在儘可能短的時間內讓CPU使用率儘可能地高

CPU運行隊列

磁盤使用率:

監控目的: 1 與應用本身有關,如果應用做大量磁盤I/O操作,I/O就會成爲瓶頸。
2 預計應用不會有很高的I/O,有助於監控系統是否在進行內存交換。

網絡使用率

netstat, typeperf

java監控工具

  • jcmd 用來打印java進程所涉及的基本類、線程、vm信息
  • jconsole jvm活動的圖形化視圖,包括線程的使用、類的使用和GC活動
  • jhat 讀取內存堆轉儲
  • jmap 提供堆轉儲和其他JVM內存使用的信息
  • jinfo jvm的系統屬性
  • jstack 轉儲Java進程的棧信息
  • jstat 提供GC和類裝載活動的信息
  • jvisualvm jvm監視的GUI工具,
    -XX:+Printflagsfinal 顯示調優標誌

性能分析工具
GlassFish
NetBeans
jmc
JFR開啓設置: -XX:+UnlockCommercialFeatures -XX:+flightRecorder

JIT編譯器

JIT(即時)編譯器是Java虛擬機的核心

入門調優: 選擇編譯器類型
編譯器類型: -server 和 -client ,-d64(64位編譯器)
java -client -XX:+TieredCompilation .jar 指定必須使用server編譯器
中級調優
1 調優代碼緩存: 代碼緩存的大小固定,所以一旦填滿,jvm就不能編譯更多代碼。
-XX:ReservedCodeCacheSize=N 設置代碼緩存大小
2 編譯閾值: 代碼執行的頻度
編譯是基於兩種JVM計數器的: 方法調用計數器和方法中的循環回邊計數器。
-XX:CompileThreshold=N 設置閾值; 閾值=回邊計數器+方法調用計數器
3 檢測編譯過程
高級編譯器調優
1 編譯線程
2 A.聯
3 逃逸分析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章