Tomcat即使不用调优,也可以运行很久
/ heap堆Attaching to process ID 15085, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.152-b16
using thread-local object allocation.
Mark Sweep Compact GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 480247808 (458.0MB)
NewSize = 10485760 (10.0MB)
MaxNewSize = 160038912 (152.625MB)
OldSize = 20971520 (20.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 144048128 (137.375MB)
used = 48282784 (46.046051025390625MB)
free = 95765344 (91.32894897460938MB)
33.51850848072111% used
Eden Space:
capacity = 128057344 (122.125MB)
used = 48076504 (45.849327087402344MB)
free = 79980840 (76.27567291259766MB)
37.54294950862014% used
From Space:
capacity = 15990784 (15.25MB)
used = 206280 (0.19672393798828125MB)
free = 15784504 (15.053276062011719MB)
1.2899930359887295% used
To Space:
capacity = 15990784 (15.25MB)
used = 0 (0.0MB)
free = 15990784 (15.25MB)
0.0% used
tenured generation:
capacity = 320208896 (305.375MB)
used = 250718368 (239.10366821289062MB)
free = 69490528 (66.27133178710938MB)
78.29837681961216% used
38345 interned Strings occupying 4710480 bytes.
可以看出新生代152M的大小空间,老生代305M的空间大小,加起来就是457M的空间大小,可以看出不是占据很大的空间,这是在笔者跑了两台tomcat加起来的大小。
对Linux进行垃圾回收之后的展示:
Attaching to process ID 15085, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.152-b16
using thread-local object allocation.
Mark Sweep Compact GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 480247808 (458.0MB)
NewSize = 10485760 (10.0MB)
MaxNewSize = 160038912 (152.625MB)
OldSize = 20971520 (20.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 144048128 (137.375MB)
used = 47638480 (45.43159484863281MB)
free = 96409648 (91.94340515136719MB)
33.07122463958712% used
Eden Space:
capacity = 128057344 (122.125MB)
used = 47449696 (45.251556396484375MB)
free = 80607648 (76.87344360351562MB)
37.053475043180654% used
From Space:
capacity = 15990784 (15.25MB)
used = 188784 (0.1800384521484375MB)
free = 15802000 (15.069961547851562MB)
1.1805800140881149% used
To Space:
capacity = 15990784 (15.25MB)
used = 0 (0.0MB)
free = 15990784 (15.25MB)
0.0% used
tenured generation:
capacity = 320208896 (305.375MB)
used = 250724400 (239.1094207763672MB)
free = 69484496 (66.26557922363281MB)
78.30026058988692% used
38345 interned Strings occupying 4710480 bytes.
没有任何变化
87个小时运行后:
Attaching to process ID 25432, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.152-b16
using thread-local object allocation.
Mark Sweep Compact GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 480247808 (458.0MB)
NewSize = 10485760 (10.0MB)
MaxNewSize = 160038912 (152.625MB)
OldSize = 20971520 (20.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 144048128 (137.375MB)
used = 3677152 (3.506805419921875MB)
free = 140370976 (133.86819458007812MB)
2.552724600489081% used
Eden Space:
capacity = 128057344 (122.125MB)
used = 3524456 (3.3611831665039062MB)
free = 124532888 (118.7638168334961MB)
2.7522482427872315% used
From Space:
capacity = 15990784 (15.25MB)
used = 152696 (0.14562225341796875MB)
free = 15838088 (15.104377746582031MB)
0.9549000224129098% used
To Space:
capacity = 15990784 (15.25MB)
used = 0 (0.0MB)
free = 15990784 (15.25MB)
0.0% used
tenured generation:
capacity = 320208896 (305.375MB)
used = 297535800 (283.7522506713867MB)
free = 22673096 (21.62274932861328MB)
92.91927979415038% used
39638 interned Strings occupying 4831576 bytes.
发现tenured generation变多
垃圾回收信息:
# jstat -gcutil -h10 25432 10000 10000
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
1.65 0.00 22.26 92.98 95.70 92.78 161022 863.381 17 7.208 870.589
0.00 1.67 52.29 93.00 95.70 92.78 161027 863.406 17 7.208 870.613
2.16 0.00 83.26 93.00 95.70 92.78 161032 863.431 17 7.208 870.639
2.16 0.00 15.04 93.00 95.70 92.78 161038 863.461 17 7.208 870.668
发现老生代占据了92%的比例,但是fgc的次数并不多,永生代的比例也很高,但是full gc也没有触发,那么对比刚开始78%的占有率,可以调节永生代,老生代触发条件为90%,防止永不触发。
java -XX:+PrintFlagsFinal -version|grep -E "CMSInitiatingOccupancyFraction|MinHeapFreeRatio|CMSTriggerRatio"
intx CMSInitiatingOccupancyFraction = -1 {product}
uintx CMSTriggerRatio = 80 {product}
uintx MinHeapFreeRatio = 40 {manageable}
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
# java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=29972224 -XX:MaxHeapSize=479555584 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
加入cms垃圾回收器之后jmap发现显示有所区别:
# jmap -heap 1887
Attaching to process ID 1887, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.152-b16
using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 480247808 (458.0MB)
NewSize = 10485760 (10.0MB)
MaxNewSize = 87228416 (83.1875MB)
OldSize = 20971520 (20.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 9437184 (9.0MB)
used = 7269400 (6.932640075683594MB)
free = 2167784 (2.0673599243164062MB)
77.02933417426215% used
Eden Space:
capacity = 8388608 (8.0MB)
used = 7030392 (6.704704284667969MB)
free = 1358216 (1.2952957153320312MB)
83.80880355834961% used
From Space:
capacity = 1048576 (1.0MB)
used = 239008 (0.227935791015625MB)
free = 809568 (0.772064208984375MB)
22.7935791015625% used
To Space:
capacity = 1048576 (1.0MB)
used = 0 (0.0MB)
free = 1048576 (1.0MB)
0.0% used
concurrent mark-sweep generation:
capacity = 83132416 (79.28125MB)
used = 51182720 (48.8116455078125MB)
free = 31949696 (30.4696044921875MB)
61.56770422743398% used
35416 interned Strings occupying 4329144 bytes.
# java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=29972224 -XX:MaxHeapSize=479555584 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
# jstat -gcutil -h10 1887 10000 10000
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
15.04 0.00 92.38 61.01 96.59 94.39 1114 7.823 20 0.345 8.169
拭目以待能运行多久:
# free -m
total used free shared buff/cache available
Mem: 1829 1028 691 0 109 672
Swap: 0 0 0
大查询之后,波动剧烈,经常有老年代垃圾回收,从20飙升到28次,但是不操作接口,全量垃圾回收次数不会有变化
# jmap -heap 1887
Attaching to process ID 1887, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.152-b16
using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 480247808 (458.0MB)
NewSize = 10485760 (10.0MB)
MaxNewSize = 87228416 (83.1875MB)
OldSize = 20971520 (20.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 9437184 (9.0MB)
used = 7721392 (7.3636932373046875MB)
free = 1715792 (1.6363067626953125MB)
81.81881374782986% used
Eden Space:
capacity = 8388608 (8.0MB)
used = 6672816 (6.3636932373046875MB)
free = 1715792 (1.6363067626953125MB)
79.5461654663086% used
From Space:
capacity = 1048576 (1.0MB)
used = 1048576 (1.0MB)
free = 0 (0.0MB)
100.0% used
To Space:
capacity = 1048576 (1.0MB)
used = 0 (0.0MB)
free = 1048576 (1.0MB)
0.0% used
concurrent mark-sweep generation:
capacity = 373309440 (356.015625MB)
used = 140767168 (134.24603271484375MB)
free = 232542272 (221.76959228515625MB)
37.70790473447443% used
33789 interned Strings occupying 4224224 bytes.
# free -m
total used free shared buff/cache available
Mem: 1829 1161 115 0 552 519
Swap: 0 0 0
[root@iZj6c9jjf7ocennecorh0eZ ~]# ./cacheClean.sh
[root@iZj6c9jjf7ocennecorh0eZ ~]# free -m
total used free shared buff/cache available
Mem: 1829 1158 562 0 107 543
Swap: 0 0 0
前后对比,相差悬殊,buff/cache弹性很大。jvm的新生代缩水明显,支撑位10m.
# jstat -gc pid 2s 3
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
15360.0 15360.0 213.9 0.0 122880.0 22630.7 307200.0 44573.6 70028.0 67590.4 8904.0 8358.5 82 1.678 2 0.153 1.831
15360.0 15360.0 0.0 327.1 122880.0 114641.2 307200.0 44574.0 70028.0 67590.4 8904.0 8358.5 85 1.701 2 0.153 1.854
15360.0 15360.0 0.0 327.1 122880.0 114641.2 307200.0 44574.0 70028.0 67590.4 8904.0 8358.5 85 1.701 2 0.153 1.854
jmap -histo pid
jmap -dump:format=b,file=m.dat pid