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