盡管 JVM 調(diào)整操作隨 JVM 提供程序的不同而有所變化,但一般的調(diào)整概念適用于所有 JVM。這些一般的概念包括:
編譯器調(diào)整。在服務(wù)器運(yùn)行時(shí)期間,所有 JVM 都使用即時(shí)(JIT)編譯器來將 Java 字節(jié)碼編譯為本機(jī)指令。
Java 內(nèi)存或堆調(diào)整。JVM 內(nèi)存管理功能(即垃圾回收)為提高 JVM 性能提供了其中一種最大的可能性。
類裝入調(diào)整。
過程
優(yōu)化啟動(dòng)性能和運(yùn)行時(shí)性能
在某些環(huán)境中,優(yōu)化 WebSphere Application Server
的啟動(dòng)性能比優(yōu)化運(yùn)行時(shí)性能更重要。在另一些環(huán)境中,優(yōu)化運(yùn)行時(shí)性能更為重要。缺省情況下,IBM JVM 是針對(duì)運(yùn)行時(shí)性能進(jìn)行優(yōu)化的,而基于
HotSpot 的 JVM 是針對(duì)啟動(dòng)性能進(jìn)行優(yōu)化的。
Java JIT
編譯器在很大程度上決定了是優(yōu)化啟動(dòng)性能還是優(yōu)化運(yùn)行時(shí)性能。編譯器使用的初始優(yōu)化級(jí)別影響編譯類方法所耗用的時(shí)間以及啟動(dòng)服務(wù)器所耗用的時(shí)間。為了提高
啟動(dòng)速度,可以降低編譯器所使用的初始優(yōu)化級(jí)別。這意味著,由于現(xiàn)在使用較低的優(yōu)化級(jí)別來編譯類方法,所以應(yīng)用程序的運(yùn)行時(shí)性能可能會(huì)下降。
因?yàn)榫幾g器在運(yùn)行時(shí)執(zhí)行階段會(huì)根據(jù)自己的判斷來重新編譯類方法以提高性能,所以,很難提供一個(gè)有關(guān)特定的運(yùn)行時(shí)性能影響的說明。最終,應(yīng)用程序的持續(xù)時(shí)間
是影響運(yùn)行時(shí)性能下降程度的主要原因。運(yùn)行時(shí)間較短的應(yīng)用程序的方法被重新編譯的可能性較高。運(yùn)行時(shí)間較長的應(yīng)用程序的方法被重新編譯的可能性較低。
IBM JVM 的缺省設(shè)置是使用高優(yōu)化級(jí)別來執(zhí)行初始編譯。如果需要更改此行為,可以使用以下 IBM JVM 選項(xiàng):
-Xquickstart
此設(shè)置影響 IBM JVM 使用較低優(yōu)化級(jí)別來編譯類方法的方式,這將提高服務(wù)器啟動(dòng)速度,但會(huì)使運(yùn)行時(shí)性能下降。缺省情況下,如果未指定此參數(shù),IBM JVM 最初將使用較高的初始優(yōu)化級(jí)別來執(zhí)行編譯。此設(shè)置能夠提高運(yùn)行時(shí)性能,但會(huì)減慢服務(wù)器啟動(dòng)速度。
缺省值: 高初始編譯器優(yōu)化級(jí)別
建議值: 高初始編譯器優(yōu)化級(jí)別
用法: -Xquickstart 可以加快服務(wù)器啟動(dòng)速度。
基于 Sun 的 Hotspot 技術(shù)的 JVM 最初使用低優(yōu)化級(jí)別來編譯類方法。使用下列 JVM 選項(xiàng)來更改此行為:
-server
基于 Sun 的 Hotspot 技術(shù)的 JVM 最初使用低優(yōu)化級(jí)別來編譯類方法。這些 JVM 使用簡單編譯器和能夠進(jìn)行優(yōu)化的 JIT
編譯器。通常情況下,使用簡單 JIT
編譯器。然而,可以通過設(shè)置此選項(xiàng)來使用能夠執(zhí)行優(yōu)化的編譯器。此更改將顯著提高服務(wù)器的性能,但使用能夠執(zhí)行優(yōu)化的編譯器時(shí),服務(wù)器的預(yù)備時(shí)間將會(huì)較
長。
缺省值: 簡單編譯器
建議值: 能夠執(zhí)行優(yōu)化的編譯器
用法: -server 啟用能夠執(zhí)行優(yōu)化的編譯器。
設(shè)置堆大小 下列命令行參數(shù)對(duì)于設(shè)置堆大小來說很有用。
-Xms
此設(shè)置控制 Java 堆的初始大小。正確調(diào)整此參數(shù)有助于降低垃圾回收開銷,從而縮短服務(wù)器響應(yīng)時(shí)間并提高吞吐量。對(duì)于某些應(yīng)用程序來說,此選項(xiàng)的缺省設(shè)置可能會(huì)太低,從而導(dǎo)致發(fā)生大量小型垃圾回收。
缺省值: 256 MB
建議值: 隨工作負(fù)載的不同而有所變化,但高于缺省值。
用法: -Xms256m 將初始堆大小設(shè)置為 256 兆字節(jié)
-Xmx
此設(shè)置控制 Java 堆的最大大小。正確調(diào)整此參數(shù)有助于降低垃圾回收開銷,從而縮短服務(wù)器響應(yīng)時(shí)間并提高吞吐量。對(duì)于某些應(yīng)用程序來說,此選項(xiàng)的缺省設(shè)置可能會(huì)太低,從而導(dǎo)致發(fā)生大量小型垃圾回收。
缺省值: 512 MB
建議值: 隨工作負(fù)載的不同而有所變化,但高于缺省值。
用法: -Xmx512m 將最大堆大小設(shè)置為 512 兆字節(jié)
-Xlp
此設(shè)置可以與 IBM JVM 配合使用,以使用大頁來分配堆。然而,如果使用此設(shè)置,那么必須將操作系統(tǒng)配置為支持大頁。使用大頁可以降低 CPU 跟蹤堆內(nèi)存時(shí)的開銷,并且還允許創(chuàng)建較大的堆。
請(qǐng)參閱調(diào)整操作系統(tǒng) 以了解有關(guān)調(diào)整操作系統(tǒng)的更多信息。
應(yīng)該指定的堆大小取決于不同時(shí)段的堆使用情況。在堆大小頻繁更改的情況下,對(duì) Xms 和 Xmx 參數(shù)指定相同的值可以提高性能。
調(diào)整 IBM JVM 的垃圾回收器。
使用 Java -X 選項(xiàng)來查看內(nèi)存選項(xiàng)列表。
-Xgcpolicy
將 gcpolicy 設(shè)置為 optthruput
會(huì)禁用并發(fā)標(biāo)記。如果沒有暫停時(shí)間問題(表現(xiàn)為應(yīng)用程序響應(yīng)時(shí)間不規(guī)律),那么應(yīng)該使用此選項(xiàng)來實(shí)現(xiàn)最大吞吐量。將 gcpolicy 設(shè)置為
optavgpause
會(huì)使用缺省值來啟用并發(fā)標(biāo)記。此設(shè)置將減少由正常垃圾回收所引起的應(yīng)用程序響應(yīng)時(shí)間不規(guī)律情況。然而,此選項(xiàng)可能會(huì)降低整體吞吐量。
缺省值: optthruput
建議值: optthruput
用法: Xgcpolicy:optthruput
-Xnoclassgc
缺省情況下,當(dāng)一個(gè)類沒有任何活動(dòng)實(shí)例時(shí),JVM 就會(huì)從內(nèi)存中卸裝該類,但是這樣會(huì)使性能下降。如果關(guān)閉類垃圾回收,就可以消除由于多次裝入和卸裝同一個(gè)類而造成的開銷。
如果不再需要某個(gè)類,那么該類在堆中所占用的空間通常將用于創(chuàng)建新對(duì)象。但是,如果應(yīng)用程序通過創(chuàng)建類的新實(shí)例來處理請(qǐng)求,并且該應(yīng)用程序的請(qǐng)求是隨機(jī)出
現(xiàn)的,那么可能會(huì)發(fā)生以下情況:先前請(qǐng)求者完成后,正常的類垃圾回收將通過釋放這個(gè)類占用的堆空間來清除這個(gè)類,但當(dāng)下一個(gè)請(qǐng)求出現(xiàn)時(shí),又必須將這個(gè)類重
新實(shí)例化。在這種情況下,您可能想使用此選項(xiàng)來禁用類垃圾回收。
缺省值: 啟用類垃圾回收
建議值: 禁用類垃圾回收
用法: Xnoclassgc 禁用類垃圾回收
有關(guān)其他信息,請(qǐng)參閱下列 DeveloperWorks 文章:
http://www.ibm.com/developerworks/java/
調(diào)整 Sun JVM 的垃圾回收器
在 Solaris 平臺(tái)上,WebSphere Application Server 在 Sun Hotspot JVM 上運(yùn)行,而不是在 IBM JVM 上運(yùn)行。對(duì) Sun JVM 使用正確的調(diào)整參數(shù)以利用其性能優(yōu)化功能十分重要。
Sun Hotspot JVM 依靠分代垃圾回收來實(shí)現(xiàn)最佳性能。下列命令行參數(shù)對(duì)于調(diào)整垃圾回收來說非常有用。
-XX:SurvivorRatio
將 Java
堆劃分為舊對(duì)象(長生命周期對(duì)象)區(qū)域和新對(duì)象區(qū)域。新對(duì)象區(qū)域進(jìn)一步細(xì)分為兩部分,第一部分用于分配給新對(duì)象(初始區(qū)域),第二部分存放那些經(jīng)過其前幾
次垃圾回收之后、但在被提升為舊對(duì)象之前仍在使用中的新對(duì)象(幸存者空間)。幸存者比率是堆的新對(duì)象區(qū)域中初始區(qū)域與幸存者空間的比率。增大此設(shè)置將針對(duì)
需要?jiǎng)?chuàng)建大量對(duì)象但僅保留少量對(duì)象的應(yīng)用程序優(yōu)化 JVM。與其他應(yīng)用程序相比,WebSphere Application Server
會(huì)生成更多中等生命周期對(duì)象和長生命周期對(duì)象,因此,應(yīng)該將此設(shè)置設(shè)置為小于缺省值。
缺省值: 32
建議值: 16
用法: -XX:SurvivorRatio=16
-XX:PermSize
為永久生成對(duì)象保留的堆區(qū)域存儲(chǔ) JVM 的所有反射數(shù)據(jù)。對(duì)于動(dòng)態(tài)地裝入和卸裝大量類的應(yīng)用程序來說,應(yīng)該增大此大小以優(yōu)化它們的性能。通過將此參數(shù)設(shè)置為 128MB,可以消除增大此部分堆所需的開銷。
建議值: 128 MB
用法: XX:PermSize=128m 將 perm 大小設(shè)置為 128 兆字節(jié)。
-Xmn
此設(shè)置控制允許新生成的對(duì)象在堆中耗用的空間量。正確調(diào)整此參數(shù)有助于降低垃圾回收開銷,從而縮短服務(wù)器響應(yīng)時(shí)間并提高吞吐量。此參數(shù)的缺省設(shè)置通常過
低,這將導(dǎo)致執(zhí)行大量的小型垃圾回收操作。如果將此參數(shù)設(shè)置得過高,可能會(huì)導(dǎo)致 JVM
僅執(zhí)行大型(全面)垃圾回收。這些垃圾回收操作通常會(huì)耗時(shí)幾秒鐘,這將嚴(yán)重影響服務(wù)器的整體性能。您必須保持將此參數(shù)設(shè)置為小于整個(gè)堆大小的一半,以避免
這種情況出現(xiàn)。
缺省值: 2228224 字節(jié)
建議值: 大約整個(gè)堆大小的 1/4
用法: -Xmn256m 將大小設(shè)置為 256 兆字節(jié)。
-Xnoclassgc
缺省情況下,當(dāng)一個(gè)類沒有任何活動(dòng)實(shí)例時(shí),JVM 就會(huì)從內(nèi)存中卸裝該類,但是這樣會(huì)使性能下降。如果關(guān)閉類垃圾回收,就可以消除由于多次裝入和卸裝同一個(gè)類而造成的開銷。
如果不再需要某個(gè)類,那么該類在堆中所占用的空間通常將用于創(chuàng)建新對(duì)象。但是,如果應(yīng)用程序通過創(chuàng)建類的新實(shí)例來處理請(qǐng)求,并且該應(yīng)用程序的請(qǐng)求是隨機(jī)出
現(xiàn)的,那么可能會(huì)發(fā)生以下情況:先前請(qǐng)求者完成后,正常的類垃圾回收將通過釋放這個(gè)類占用的堆空間來清除這個(gè)類,但當(dāng)下一個(gè)請(qǐng)求出現(xiàn)時(shí),又必須將這個(gè)類重
新實(shí)例化。在這種情況下,您可能想使用此選項(xiàng)來禁用類垃圾回收。
缺省值: 啟用類垃圾回收
建議值: 禁用類垃圾回收
用法: Xnoclassgc 禁用類垃圾回收
有關(guān)調(diào)整 Sun JVM 的其他信息,請(qǐng)參閱 Java HotSpot VM 的性能文檔。
調(diào)整 HP JVM 的垃圾回收器
HP JVM 依靠分代垃圾回收來實(shí)現(xiàn)最佳性能。下列命令行參數(shù)對(duì)于調(diào)整垃圾回收來說非常有用。
-Xoptgc
此設(shè)置針對(duì)包含許多短生命周期對(duì)象的應(yīng)用程序優(yōu)化 JVM。如果未指定此參數(shù),那么 JVM 通常執(zhí)行大型(全面)垃圾回收。全面垃圾回收會(huì)花費(fèi)幾秒鐘時(shí)間,這將顯著影響服務(wù)器性能。
缺省值: off
建議值: on
用法: -Xoptgc 啟用優(yōu)化的垃圾回收。
-XX:SurvivorRatio
將 Java
堆劃分為舊對(duì)象(長生命周期對(duì)象)區(qū)域和新對(duì)象區(qū)域。新對(duì)象區(qū)域進(jìn)一步細(xì)分為兩部分,第一部分用于分配給新對(duì)象(初始區(qū)域),第二部分存放那些經(jīng)過其前幾
次垃圾回收之后、但在被提升為舊對(duì)象之前仍在使用中的新對(duì)象(幸存者空間)。幸存者比率是堆的新對(duì)象區(qū)域中初始區(qū)域與幸存者空間的比率。增大此設(shè)置將針對(duì)
需要?jiǎng)?chuàng)建大量對(duì)象但僅保留少量對(duì)象的應(yīng)用程序優(yōu)化 JVM。與其他應(yīng)用程序相比,WebSphere Application Server
會(huì)生成更多中等生命周期對(duì)象和長生命周期對(duì)象,因此,應(yīng)該將此設(shè)置設(shè)置為小于缺省值。
缺省值: 32
建議值: 16
用法: -XX:SurvivorRatio=16
-XX:PermSize
為永久生成對(duì)象保留的堆區(qū)域存儲(chǔ) JVM 的所有反射數(shù)據(jù)。對(duì)于動(dòng)態(tài)地裝入和卸裝大量類的應(yīng)用程序來說,應(yīng)該增大此大小以優(yōu)化它們的性能。通過將此參數(shù)指定為 128 兆字節(jié),可以消除增大此部分堆所需的開銷。
缺省值: 0
建議值: 128 兆字節(jié)
用法: -XX:PermSize=128m 將 PermSize 設(shè)置為 128 兆字節(jié)
-XX:+ForceMmapReserved
缺省情況下,Java 堆以“惰性交換”方式進(jìn)行分配。在此方式下,將根據(jù)需要來分配內(nèi)存頁,這樣可以節(jié)省交換空間,但是也將強(qiáng)制使用 4KB
頁。在大型堆系統(tǒng)中,這種內(nèi)存分配方式允許堆包含數(shù)以十萬計(jì)的頁。此命令禁用“惰性交換”并允許操作系統(tǒng)使用較大的內(nèi)存頁,從而優(yōu)化對(duì)構(gòu)成 Java
堆的內(nèi)存的訪問。
缺省值: off
建議值: on
用法: -XX:+ForceMmapReserved 將禁用“惰性交換”。
-Xmn
此設(shè)置控制允許新生成的對(duì)象在堆中耗用的空間量。正確調(diào)整此參數(shù)有助于降低垃圾回收開銷,從而縮短服務(wù)器響應(yīng)時(shí)間并提高吞吐量。此參數(shù)的缺省設(shè)置通常過低,這將導(dǎo)致執(zhí)行大量的小型垃圾回收操作。
缺省值: 沒有缺省值
建議值: 大約整個(gè)堆大小的 3/4
用法: -Xmn768m 將大小設(shè)置為 768 兆字節(jié)
虛擬頁大小
通過將 Java 虛擬機(jī)的指令頁大小和數(shù)據(jù)頁大小設(shè)置為 64MB,可以提高性能。
缺省值: 4MB
建議值: 64MB
用法: 使用以下命令。命令輸出提供了進(jìn)程可執(zhí)行文件的當(dāng)前操作系統(tǒng)特征:
chatr +pi64M +pd64M /opt/WebSphere/
AppServer/java/bin/PA_RISC2.0/
native_threads/java
-Xnoclassgc
缺省情況下,當(dāng)一個(gè)類沒有任何活動(dòng)實(shí)例時(shí),JVM 就會(huì)從內(nèi)存中卸裝該類,但是這樣會(huì)使性能下降。如果關(guān)閉類垃圾回收,就可以消除由于多次裝入和卸裝同一個(gè)類而造成的開銷。
如果不再需要某個(gè)類,那么該類在堆中所占用的空間通常將用于創(chuàng)建新對(duì)象。但是,如果應(yīng)用程序通過創(chuàng)建類的新實(shí)例來處理請(qǐng)求,并且該應(yīng)用程序的請(qǐng)求是隨機(jī)出
現(xiàn)的,那么可能會(huì)發(fā)生以下情況:先前請(qǐng)求者完成后,正常的類垃圾回收將通過釋放這個(gè)類占用的堆空間來清除這個(gè)類,但當(dāng)下一個(gè)請(qǐng)求出現(xiàn)時(shí),又必須將這個(gè)類重
新實(shí)例化。在這種情況下,您可能想使用此選項(xiàng)來禁用類垃圾回收。
缺省值: 啟用類垃圾回收
建議值: 禁用類垃圾回收
用法: Xnoclassgc 禁用類垃圾回收
有關(guān)調(diào)整 HP 虛擬機(jī)的其他信息,請(qǐng)參閱 Java 技術(shù)軟件 HP-UX 11i。
調(diào)整 HP 的 JVM for HP-UX 設(shè)置下列選項(xiàng)以提高應(yīng)用程序性能:
-XX:SchedulerPriorityRange=SCHED_NOAGE
-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.DevPollSelectorProvider
-XX:-ExtraPollBeforeRead