一.JRockit調優簡介服務器
JRockit是一個自適應的JVM,它可以自動調整本身去適應底層硬件,所以對它的調優主要集中在一些須要人工干預的參數上,好比說:須要劃分多少RAM給JRockit使用等。JRockit有一組非標準的-X啓動選項,咱們能夠用它來調節 JVM。JRockit有兩組主要的子系統能夠被優化--內存管理系統(包括垃圾回收)和線程系統。在內存管理子系統方面,有不少調優的工做能夠作。併發
二.Tuning WebLogic JRockit JVMjvm
1.設置初始堆尺寸
能夠經過-Xms:<size>m來設置初始堆大小,若是-Xmx的值小於128MB,則-Xms缺省取值爲16MB;若是-Xmx設置大於128MB,則-Xms缺省值爲物理內存的25%,最大不超過64M。例子:
-Xgc:gencon -xms:64m -Xmx:64m myClass
2.設置最大堆尺寸
能夠經過-Xmx:<size>m來設置最大堆尺寸。在IA32構架下,因爲操做系統給每一個進程的最大內存尋址空間爲1.8G,所以最大堆尺寸不能超過1.8G。在IA64構架下,就沒有1.8G的限制。
若是你的JAVA應用程序在運行時出現了Out of memory的錯誤,你就須要調大最大堆尺寸。若是沒有設置最大堆尺寸,則缺省值爲:
1. 若是設置了-Xgc:gencopy,由最大堆尺寸是min{400, 物理內存*75%};
2. 若是沒有設置-Xgc:gencopy,由最大堆尺寸是min{1536, 物理內存*75%};
最好手工把最大堆尺寸設置爲物理內存(1024M)的75%:
-Xgc:gencon -xms:64m -Xmx:768m myClass
3.設置Nursery的尺寸
可使用-Xns:<size>來設置Nursery的尺寸,咱們要在保證垃圾回收停頓時間(garbage collection-pause)儘量短的同時,儘可能加大Nursery的尺寸,這在建立了大量的臨時對象時尤爲重要。缺省值爲:
1. 對於-Xgc:gencopy,缺省的Nursery大小爲320KB/CPU,對於10個CPU的系統來講,Nursery大小爲3200KB(3.2M)
2. 對於-Xgc:gencon,缺省的Nursery大小爲10M/CPU,對於10個CPU的系統來講,Nursery大小爲100M
4.定義內存空間的清理時機
可使用-Xcleartype:<gc|local|alloc>來定義已經被垃圾回收的內存空間在何時能夠被清理,支持如下三種方式:
1. gc,在垃圾回收的同時清理內存;
2. local,在分配了一塊thread-local區域時清理內存,僅在把參數-Xallocationtype設置成local時纔有用;
3. alloc,在這塊內存被分配給其它對象時清理。在IA64上目前還不支持。
缺省值爲:
1. IA32上缺省值爲alloc
2. IA64上缺省值爲gc
5.定義線程分配的類型
可使用-Xallocationtype:<global|local>來定義線程分配的類型。
1. global,在最大堆尺寸比較小時(小於128M)或者應用程序大量使用了線程時使用。
2. local,在最大堆尺寸比較大時(大於128M)或者應用程序少許使用了線程時使用。
缺省值:
1. 若是設置了-Xgc:gencopy,缺省值爲global
2. 若是設置了-Xgc:siglecon,-Xgc:gencon和-Xgc:parallel,缺省值爲local
6.定義線程棧尺寸
可使用-Xss<size>[k|K][m|M]來定義線程棧大小。最小線程尺寸定義以下:
1. thin threads:最小線程棧尺寸爲8K,缺省爲64K;
2. native threads:最小線程棧尺寸爲16K
若是-Xss設置小於最小值,則自動使用最小值。
缺省值:
1. IA32系統,WIN32:64K,LINUX32:128K
2. IA64系統,WIN64:320K,LINUX64:1M工具
二.Basic Tuning Tips and Techniques性能
儘管JRockit提供了一組缺省的OOTB配置選項,但最好根據實際應用狀況來對JRockit做一些調整。
1.決定你要在哪方面調優
要考慮的因素有:
1. 要爲JRockit分配多少內存空間;
2. 你要調優的目的是什麼,是要獲得更好的響應性仍是更好的性能;
2.設置堆尺寸
對於堆尺寸來講,固然是越大越好了。若是設得不夠大,就會形成Out-of-memory和內存分頁錯。若是同時運行了多個應用程序,建議把最小和最大堆尺寸設置成同樣大。
3.在高響應性方面的調優
要獲得更好的響應性能,應該設置
1. 使用併發垃圾回收器。-Xgc:gencon
2. 設置初始和最大堆大小。-Xms512m,-Xmx768m,因爲使用了併發垃圾回收器,因此堆大小不會形成長時間的等待。
3. 設置nursery尺寸。若是用到了大量的臨時對象,則須要適當的調大nursery尺寸。調大nursery尺寸會致使垃圾回收的停頓時間加長,所以要注意,確保垃圾回收的停頓時間在可忍受的範圍內,這個停頓時間能夠經過設置-Xgcpause來查看。
4.在高性能方面的調優
若是要獲得更好的性能,你應該:
1. 選用並行垃圾回收器,因爲並行垃圾回收器不使用nursery,所以你沒必要再設置-Xns,方法是加上-Xgc:parallel
2. 把初始和最大堆尺寸設置調到儘量的大。方法是-Xms512m, -Xmx768m。
5.分析垃圾回收和停頓時間
1. 使用-Xgcreport生成報表,顯示垃圾回收的統計信息,從中能夠看出你是否是最有效地使用了垃圾回收器。
2. 使用-Xverbose:memory來顯示在運行期間每一次垃圾回收的停頓時間。本選項僅用於調試,會產生大量的控制檯輸出。
6.調整線程選項
當大量地使用了線程時(超過100個),須要調整線程選項:
1. 使用thin線程選項。-Xthinthreads。瘦線程模式在LINUX下很是有效。注意:瘦線程在JRockit中只是一個試驗選項,不推薦普遍使用;
2. 關閉本地分配線程的選項。-Xallocationtype:global。每一個本地線程區都要消耗大約2K的內存,若是大量地使用了線程,本地線程不但會形成內存空間浪費,並且還會形成堆碎片。使用全局線程機制會減小堆碎片,但在內存分配方面速度要慢一些。
7.分析並改善應用程序設計
找出瓶頸方法:
1. 使用Intel VTune工具;
2. 使用-Xjvmpi:allocs=off,monitors=off,entryexit=off選項。優化
三.Command Line Options by Nameui
啓動JRockit時,能夠帶一些-X選項,這些選項是非JVM標準的,專門用於配置JRockit的性能。spa
選項
|
描述
|
-X操作系統 |
顯示擴展Java選項線程 |
-Xallotype -Xallocationtype |
可取值global和local,定義使用本地線程仍是全局線程。 |
-Xbootclasspath |
指定類搜索路徑,能夠是ZIP和JAR文件,以;或:分隔 |
-Xcleartype |
定義內存清理時機,可取值gc, local, alloc。gc表示在垃圾回收時清理內存;local表示時分配一塊local線程區時清理;alloc表示內存區要被分配給其它對象時清理 |
-Xgc |
選擇要使用的垃圾回收器的類型,可取值: gencopy:generational copying singlecon:single spaced concurrent,單空間併發 gencon:generational concurrent parallel:parallel 若是-Xmx小於128M,缺省使用gencopy,不然使用gencon |
-Xgcpause |
打印由垃圾回收器形成的停頓時間 |
-Xgcreport |
打印垃圾回收報表 |
-Xjvmpi |
是否容許JVMPI事件,這些事件有: entryexit(缺省ON) allocs(缺省ON) monitors(缺省ON) arenasdelete(缺省OFF) |
-Xmanagement |
激活JVM中的管理服務器,在JVM的管理控制檯能鏈接到它以前,必須先激活。 |
-Xms |
設置初始堆大小,單位有K、M、G |
-Xmx |
設置最大堆大小,單位有K、M、G |
-Xnativethreads |
使用本地線程系統,這是缺省選項 |
-Xnoclassgc |
禁止對類做垃圾回收 |
-Xnohup |
告訴JRockit,忽略CTRL_LOGOFF_EVENT和SIGHUP事件 |
-Xns |
設置nursery尺寸,單位有K、M、G |
-Xss |
設置線程棧尺寸,單位有K、M、G |
-Xthinthreads |
使用JRockit的高性能線程系統,在IA64上不可用。 |
-Xverbose |
讓JRockit打印更多的信息,可選的參數有: codegen、cpuinfo、gc、load、memory、Opt |
-Xverify |
做完整的bytecode一級的校驗 |