jmap輸出java
[tomcat@n01 ~]$ /opt/java/jdk1.8.0_101/bin/jmap -heap 11368 Attaching to process ID 11368, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.101-b13 using thread-local object allocation. Parallel GC with 2 thread(s) Heap Configuration: MinHeapFreeRatio = 0 MaxHeapFreeRatio = 100 MaxHeapSize = 2684354560 (2560.0MB) NewSize = 1073741824 (1024.0MB) MaxNewSize = 1073741824 (1024.0MB) OldSize = 1610612736 (1536.0MB) NewRatio = 2 SurvivorRatio = 8 MetaspaceSize = 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 852492288 (813.0MB) used = 420427144 (400.95056915283203MB) free = 432065144 (412.04943084716797MB) 49.31741317993014% used From Space: capacity = 113770496 (108.5MB) used = 2299712 (2.19317626953125MB) free = 111470784 (106.30682373046875MB) 2.021360617079493% used To Space: capacity = 107479040 (102.5MB) used = 0 (0.0MB) free = 107479040 (102.5MB) 0.0% used PS Old Generation capacity = 1610612736 (1536.0MB) used = 50883368 (48.526161193847656MB) free = 1559729368 (1487.4738388061523MB) 3.1592552860577903% used 27595 interned Strings occupying 3138384 bytes.
MaxHeapFreeRatio: GC後若是發現空閒堆內存佔到整個預估堆內存的N%(百分比),則收縮堆內存的預估最大值, 預估堆內存是堆大小動態調控的重要選項之一. 堆內存預估最大值必定小於或等於固定最大值(-Xmx指定的數值). 前者會根據使用狀況動態調大或縮小, 以提升GC回收的效率
MinHeapFreeRatio: GC後若是發現空閒堆內存佔到整個預估堆內存的N%(百分比), 則放大堆內存的預估最大值
MaxHeapSize: 即-Xmx, 堆內存大小的上限
InitialHeapSize: 即-Xms, 堆內存大小的初始值
NewSize: 新生代預估堆內存佔用的默認值
MaxNewSize: 新生代佔整個堆內存的最大值
OldSize: 老年代的默認大小, default size of the tenured generation
NewRatio: 老年代對比新生代的空間大小, 好比2表明老年代空間是新生代的兩倍大小. The ratio of old generation to young generation.
SurvivorRatio: Eden/Survivor的值. 這個值的說明, 不少網上轉載的都是錯的. 8表示Survivor:Eden=1:8, 由於survivor區有2個, 因此Eden的佔比爲8/10. Ratio of eden/survivor space size. -XX:SurvivorRatio=6 sets the ratio between each survivor space and eden to be 1:6, each survivor space will be one eighth of the young generation.
MetaspaceSize: 分配給類元數據空間的初始大小(Oracle邏輯存儲上的初始高水位,the initial high-water-mark ). 此值爲估計值. MetaspaceSize設置得過大會延長垃圾回收時間. 垃圾回收事後, 引發下一次垃圾回收的類元數據空間的大小可能會變大
MaxMetaspaceSize: 是分配給類元數據空間的最大值, 超過此值就會觸發Full GC. 此值僅受限於系統內存的大小, JVM會動態地改變此值
CompressedClassSpaceSize: 類指針壓縮空間大小, 默認爲1G
G1HeapRegionSize: G1區塊的大小, 取值爲1M至32M. 其取值是要根據最小Heap大小劃分出2048個區塊. With G1 the Java heap is subdivided into uniformly sized regions. This sets the size of the individual sub-divisions. The default value of this parameter is determined ergonomically based upon heap size. The minimum value is 1Mb and the maximum value is 32Mb. Sets the size of a G1 region. The value will be a power of two and can range from 1MB to 32MB. The goal is to have around 2048 regions based on the minimum Java heap size.
redis
指針壓縮1. 64位平臺上默認打開
1)使用-XX:+UseCompressedOops壓縮對象指針
"oops"指的是普通對象指針("ordinary" object pointers)。
Java堆中對象指針會被壓縮成32位。
使用堆基地址(若是堆在低26G內存中的話,基地址爲0)
2)使用-XX:+UseCompressedClassPointers選項來壓縮類指針
對象中指向類元數據的指針會被壓縮成32位
類指針壓縮空間會有一個基地址
2. 元空間和類指針壓縮空間的區別
1)類指針壓縮空間只包含類的元數據,好比InstanceKlass, ArrayKlass
僅當打開了UseCompressedClassPointers選項才生效
爲了提升性能,Java中的虛方法表也存放到這裏
這裏到底存放哪些元數據的類型,目前仍在減小
2)元空間包含類的其它比較大的元數據,好比方法,字節碼,常量池等。
apache
[tomcat@n01 ~]$ /opt/java/jdk1.8.0_101/bin/jstat -gcutil 11368 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 2.02 0.00 49.32 3.16 92.13 88.17 24 1.220 3 0.637 1.857
S0: Survivor 0區的空間使用率 Survivor space 0 utilization as a percentage of the space's current capacity.
S1: Survivor 1區的空間使用率 Survivor space 1 utilization as a percentage of the space's current capacity.
E: Eden區的空間使用率 Eden space utilization as a percentage of the space's current capacity.
O: 老年代的空間使用率 Old space utilization as a percentage of the space's current capacity.
M: 元數據的空間使用率 Metaspace utilization as a percentage of the space's current capacity.
CCS: 類指針壓縮空間使用率 Compressed class space utilization as a percentage.
YGC: 新生代GC次數 Number of young generation GC events.
YGCT: 新生代GC總時長 Young generation garbage collection time.
FGC: Full GC次數 Number of full GC events.
FGCT: Full GC總時長 Full garbage collection time.
GCT: 總共的GC時長 Total garbage collection time.tomcat
記錄GC日誌less
加入參數jvm
-verbose:gc -Xloggc:$CATALINA_BASE/logs/gc.log XX:+PrintGCTimeStamps -XX:+PrintGCDetails
例如ide
export JAVA_HOME=/opt/java/jdk1.8.0_101 export CATALINA_HOME=/opt/tomcat/apache-tomcat-8.0.36-redis export CATALINA_BASE=/home/tomcat/tomcat8_jdk8 export JAVA_OPTS="-server -Xms1280m -Xmx1280m -XX:MaxNewSize=896m -Djava.awt.hea dless=true -verbose:gc -Xloggc:$CATALINA_BASE/logs/gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails" cd $CATALINA_HOME/bin ./catalina.sh start
若是jvm進程不明緣由退出, 能夠查看syslog, 位置是 /var/log/messagesoop
-XX:MaxTenuringThreshold 垃圾最大年齡, 若是設置爲0的話,則年輕代對象不通過Survivor區,直接進入年老代. 對於年老代比較多的應用,能夠提升效率.若是將此值設置爲一個較大值,則年輕代對象會在Survivor區進行屢次複製,這樣能夠增長對象再年輕代的存活 時間,增長在年輕代即被回收的機率. 該參數只有在串行GC時纔有效. 性能