JVM性能調優入門
1. 背景
雖然大多數應用程序使用JVM的默認設置就能很好地工作,仍然有不少應用程序需要對JVM進行額外的配置才能達到其期望的性能要求。現在JVM為了滿足各種應用的需要,為程序運行提供了大量的JVM配置選項。不幸的是,針對一個應用程序進行的JVM調優(配置)可能並不適用於另一個應用程序。
註意:為了達到應用程序的系統需求,可能需要進行多次叠代才能獲得應用程序幹系人滿意的程序性能。
2. 應用程序的系統需求
吞吐量、響應時間、內存消耗量、可用性、可管理性等。
1. 可用性
可用性是對應用程序處於可操作,可使用狀態的度量。可用性需求指的是當引用程序的某些組件發生故障或失效時,應用程序或應用程序的一部分在多大程度上還可以繼續提供服務。
2. 可管理性
可管理性是對由運行,監控應用程序而產生的操作性開銷的度量,同時也包含了配置應用程序的難易程度。
3. 吞吐量
吞吐量是對單位時間內處理工作量的度量。設計吞吐量需求時,一般不考慮它對延遲或響應時間的影響。通常情況下,增加吞吐量的代價是延遲的增加或內存使用的增加。
4. 延遲及響應性
延遲或響應性是對應用程序收到指令開始工作直到完成該工作消耗時間的度量。定義延遲或響應性需求時並不考慮程序的吞吐量,通常情況下,提高響應性或縮小延遲的代價是更低的吞吐量或更多的內存消耗。
5. 內存占用
內存占用指的同等程度的吞吐量,延遲,可用性和可管理性前提下,運行應用程序所需的內存大小。內存占用通常以運行應用程序需要的Java堆大小或運行應用程序需要的總內存大小來表述。一般情況下,通過增大Java堆的方式增加可用內存能夠提高吞吐量,降低延遲或兼顧兩者。
6. 啟動時間
啟動時間是應用程序初始化所消耗的時間。
3. JVM部署模式
JVM部署模式選擇指的是將應用程序部署到單個JVM實例上,還是部署到多個JVM實例上。
1. 單JVM部署模式
采用單JVM部署模式的應用程序存在單點故障的問題。
2. 多JVM部署模式
將JVM應用程序部署到多個JVM實例能夠獲得更好的可用性,以及更低延遲的可能性。
多JVM部署模式可能提供更低的延遲,這是因為多JVM部署模式下,Java堆通常比較小,較小的堆在垃圾收集時產生的停頓更小。通常情況下,垃圾收集鎖產生的停頓是影響應用程序延遲性的最主要因素。
一般情況下,使用的JVM數目越少越好,監控和管理成本就越低,消耗的總內存也更少。
4. JVM運行模式
1. Client模式或Server模式
HotSpot VM有2中運行模式:Client模式、Server模式、Tiered Server模式。
Client模式的特點是啟動快、占用內存少、JIT編譯器生成代碼的速度也更快。
Server模式則提供了更復雜的生成碼優化功能,這個功能對於服務器應用而言尤其重要。大多數Server模式的JIT編譯優化都要消耗額外的時間以收集更多的應用程序行為信息、為應用程序運行生成更優的生成碼。
Tiered Server模式結合了Client和Server運行模式的長處,即快速啟動和高效的生成碼。通過-server -XX:+TieredCompilation命令行選項可以啟動Tiered Server模式。
JVM性能調優入門