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