1. max and min heap size set to 2GB
2. New ratio set to 4. that means around 1/5th of total heap size i.e. 400MB should be allocated to new generation
3. explicit gc is disabled
4. Parallel gc is used for old gen
The actual memory allocation by JVM (as printed by the GC log) is quite different for 4 of these 6 nodes from the that specified at start up (as above). For the other 2 it matches the start up parameters.
Same app server (Weblogic 9.2) version runs all these nodes and it uses the same sun JVM.
The gc log for the nodes that follow startup parameters (say group A) is -
The max space allocated for new gen is around 40MB - only 10% of what we would expect from the settings. Old gen is what we would expect. This is leading to a collection on new gen every 10-20 sec. Time taken for it is less only 30-40 ms. But I can't explain why only 10% of expected space is allocated to the new gen.
There are some difference in the nodes from group A and group B. But I don't see how that could make such a difference.
The difference are -
Group A: Sun Fire 1500K with 4 dual core CPUs (16 threads) and 16 GB RAM (around 40% of it is used)
Group B: Sun Fire T-2000 with 1 quad core CPU with 4 threads each (16 threads) and 8 GB RAM (only around 40% mem used)
Group A: Solaris 9
Group B: Solaris 10
Though the app server, jvm and apps installed are the same there is some difference in the way apps are used.
Group A: only used for batch operations.
Group B: used for realtime requests from user.
I can try specifying the amount of memory that should be used for new gen on nodes in group B. Not sure if that will have any impact on mem allocation.
I can provide any further details on the setting if required.
There are quite a few default settings used by JVM. If there is a way to print those, may be we can compare and see if there is any difference.
One more observation. On group A servers collection of new gen happen every 10 sec or less. On group B servers it is at every 10-20 sec. I am wondering if the throughput collector used for new gen uses only as much memory as is required to keep gc interval or gc time within certain limit - no matter how much is made available. I have not specified any such criteria though. Is there a way to see these defaults?