Reduction of survivors leads to continuous full GC

I had this troubling experience with a Tomcat server that runs:

  • our Hudson server;
  • An intermediate version of our web application, redistributed 5-8 times a day.

The problem is that we get continuous garbage collection, but the old generation is not filling up anywhere. I noticed that the surviving spaces are next to the existing one, and the output of the garbage collector is similar to:

[GC 103688K->103688K(3140544K), 0.0226020 secs]
[Full GC 103688K->103677K(3140544K), 1.7742510 secs]
[GC 103677K->103677K(3140544K), 0.0228900 secs]
[Full GC 103677K->103677K(3140544K), 1.7771920 secs]
[GC 103677K->103677K(3143040K), 0.0216210 secs]
[Full GC 103677K->103677K(3143040K), 1.7717220 secs]
[GC 103679K->103677K(3143040K), 0.0219180 secs]
[Full GC 103677K->103677K(3143040K), 1.7685010 secs]
[GC 103677K->103677K(3145408K), 0.0189870 secs]
[Full GC 103677K->103676K(3145408K), 1.7735280 secs]

Heap information before rebooting Tomcat:

Attaching to process ID 10171, please wait...
Debugger attached successfully.              
Server compiler detected.                    
JVM version is 14.1-b02                      

using thread-local object allocation.
Parallel GC with 8 thread(s)         

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 3221225472 (3072.0MB)
   NewSize          = 2686976 (2.5625MB)   
   MaxNewSize       = 17592186044415 MB    
   OldSize          = 5439488 (5.1875MB)   
   NewRatio         = 2                    
   SurvivorRatio    = 8                    
   PermSize         = 21757952 (20.75MB)   
   MaxPermSize      = 268435456 (256.0MB)  

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 1073479680 (1023.75MB)
   used     = 0 (0.0MB)
   free     = 1073479680 (1023.75MB)
   0.0% used
From Space:
   capacity = 131072 (0.125MB)
   used     = 0 (0.0MB)
   free     = 131072 (0.125MB)
   0.0% used
To Space:
   capacity = 131072 (0.125MB)
   used     = 0 (0.0MB)
   free     = 131072 (0.125MB)
   0.0% used
PS Old Generation
   capacity = 2147483648 (2048.0MB)
   used     = 106164824 (101.24666595458984MB)
   free     = 2041318824 (1946.7533340454102MB)
   4.943684861063957% used
PS Perm Generation
   capacity = 268435456 (256.0MB)
   used     = 268435272 (255.99982452392578MB)
   free     = 184 (1.7547607421875E-4MB)
   99.99993145465851% used

The corresponding JVM flags passed to Tomcat are as follows:

-verbose:gc -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFFE -Xmx3g -XX:MaxPermSize=256m

Please note that the remaining living spaces are approximately 40 MB in size at startup.

Any ideas on how I can avoid this problem would be appreciated.


Update:

JVM Version

$ java -version
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03)
Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02, mixed mode)

PermGen , , , .

+5
4

, , PS Perm Generation, 99.999% ( 184 256 *** MB *** ).

, 256 , . , . Perm Gen - .

+12

ClassLoader - , , - , ClassLoader, , . PermGenSpace.

, , a followup , .

+6

, , . perm gen, , - , . , JSPs Java, JSP, .

, .

, :

  • Hudson
  • Hudson . :
    • (, , , );
    • - . , , ( 2 ), (.. - 2 , ).
+4

-XX:SurvivorRatio Eden . JDK 1.5 tuning doc 32, 1:32. , . , , , .

, , , . , , Eden. , .

Eden, -XX:NewRatio ( 3). , , , (.. ). .


- , : , , . .

+4

All Articles