Java性能優化權威指南-讀書筆記(二)-JVM性能調優-概述

概述:
JVM性能調優沒有一個很是固定的設置,好比堆大小設置多少,老年代設置多少。而是要根據實際的應用程序的系統需求,實際的活躍內存等肯定。
正文:html

JVM調優工做流程

JVM調優工做流程圖

整個調優過程是不斷重複的一個迭代,後面的步驟有可能影響前面的配置,可能須要從新調優。java

應用程序的系統需求

肯定應用程序的系統需求是性能調優的基礎,後面的調優都會依賴這個要求。一個應用不會無休止地調優下去。緩存

1.可用性安全

2.可管理性jvm

3.啓動時間分佈式

4.吞吐量性能

TPS: 每秒多少次事務ui

QPS: 每秒多少次查詢spa

5.延遲操作系統

好比關鍵請求必須60ms完成響應

6.內存佔用

選擇JVM的部署模式

單JVM部署模式:能夠用更多的物理內存
多JVM部署模式:減小了單點,不過度布式部署也解決了這個問題

JVM運行模式

32位JVM:

內存空間限制爲4G,關鍵是還進一步受限於操做系統,Windows大約1.5G,Linux大約3G。

64位JVM:

對象指針的長度從32位變爲64位,致使CPU高速緩存能夠緩存的指針變少,下降了緩存效率。能夠開啓指針壓縮,解決這個問題,指針壓縮在堆小於等於26GB時,性能最好。JVM會根據堆大小自動開啓這個。

垃圾收集調優基礎

基本原則

1. 每次MinorGC都儘量多地收集垃圾對象。能夠減小FullGC的頻率,由於FullGC的持續時間老是最長;

2. 處理吞吐量和延遲問題時,GC能使用的內存越大,垃圾收集的效果越好,應用越流暢;

3. 在這三個屬性(吞吐量、延遲、內存佔用)中任意選擇兩個進行JVM垃圾收集器調優,由於三個屬性確定不能同時知足;

GC日誌

GC日誌是收集調優所需信息的最好途徑,下面是一次MinorGC的日誌,FullGC的日誌和這個相似:

5.483: [GC (Allocation Failure) 
[PSYoungGen: 142650K->16873K(145408K)] 
168504K->48298K(189440K), 0.0769590 secs] 
[Times: user=0.22 sys=0.00, real=0.08 secs] 

1). 各屬性說明

5.483:是JVM啓動到如今的時間戳

Allocation Failure:Eden區分配內存失敗,致使GC

142650K(新生代回收前大小)->16873K(新生代回收後大小)(145408K(新生代總大小))

168504K(回收前堆佔用大小)->48298K(回收後堆佔用大小)(189440K(堆總大小))

Times:user(GC非操做系統指令佔用的CPU時間)sys(GC操做系統調用佔用的CPU時間)real(實際佔用的CPU時間)

 

2). 計算老年代方法

根據上面這個MinorGC日誌,能夠推算出老年代在GC先後的大小。

GC前:168504K(回收前堆佔用大小)-142650K(新生代回收前大小)=25854K

GC後:48298K(回收後堆佔用大小)-16873K(新生代回收後大小)=31425K

 

3). GC日誌命令行選項

-XX:+PrintGCTimeStamps

打印這次垃圾回收距離jvm開始運行的所耗時間

-XX:+PrintGCDeatils

打印垃圾回收的細節信息

-Xloggc:<filename>

將垃圾回收信息輸出到指定文件

-XX:+PrintGCDateStamps

須要打印日曆形式的時間戳選項

-XX:+PrintGCApplicationStoppedTime

-XX:+PrintGCApplicationConcurrentTime

打印應用程序因爲執行VM安全點操做而阻塞的時間以及兩個安全點操做之間應用程序的運行時間

-XX:+PrintSafepointStatistics

能夠將垃圾回收的安全點與其餘的安全點區分開

相關文章
相關標籤/搜索