2012-06-15 3 views
2

Я переключился на сборщик CMS для моего приложения, а пропускная способность приложения уменьшилась вдвое. Из GC-журналов я вижу высокую частоту возникновения малых GC (aroung 10 per second). Я выделил кучу размером 4G. JVM по умолчанию использует очень маленький размер для молодого поколения (менее 40MB). Я хочу попробовать CMS, увеличив размер молодого поколения. Можете ли вы указать мне правильный параметр JVM для этого.Параметр NewRatio не работает с сборщиком мусора CMS

  • Я попытался -XX: NewRatio но JVM проигнорировал этот параметр, и не было никаких изменений в молодой ген размеров
  • Моя ява версия java version "1.6.0_14"
+0

Какая версия Java вы используете? Можете ли вы попробовать Java 6 udpate 33? –

ответ

4

Как вы установили -XX:NewRatio, и на котором JVM версия?

В любом случае. Его можно игнорировать, если вы также устанавливаете -XX:MaxNewSize=size, что является функцией, или если вы также устанавливаете -XX:+UseConcMarkSweepGC, который является known bug.

+0

Большое спасибо. это было именно так. Я использовал с помощью '-XX: + UseConcMarkSweepGC' и' -XX: NewRatio' вместе в java-версии 1.6.0_14 ". Думаю, я обновлю свою JVM и попробую это. – ManojGumber

1

Это работает для меня:

Значения по умолчанию (Java 7 64bit на Windows):

 
java -Xmx4g -Xms4g -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -version 
java version "1.7.0_07" 
Java(TM) SE Runtime Environment (build 1.7.0_07-b10) 
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode) 
Heap 
par new generation total 613440K, used 21813K 
    eden space 545344K, 4% used 
    from space 68096K, 0% used 
    to space 68096K, 0% used 
concurrent mark-sweep generation total 3512768K, used 0K 
concurrent-mark-sweep perm gen total 21248K, used 2084K 

Теперь определения параметров соотношения (примерно такой же результат):

 
java -Xmx4g -Xms4g -XX:+PrintGCDetails -XX:NewRatio=6 -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -version 
par new generation total 539264K, used 19174K 
    eden space 479360K, 4% used 
    from space 59904K, 0% used 
    to space 59904K, 0% used 
concurrent mark-sweep generation total 3595136K, used 0K 
concurrent-mark-sweep perm gen total 21248K, used 2084K 

А потом совершенно другое соотношение между новыми/старыми и общими/оставшимися в живых:

 
java -Xmx4g -Xms4g -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -version 
par new generation total 1398144K, used 27965K 
    eden space 699136K, 4% used 
    from space 699008K, 0% used 
    to space 699008K, 0% used 
concurrent mark-sweep generation total 2097152K, used 0K 
concurrent-mark-sweep perm gen total 21248K, used 2084K 

То же самое работает для Java 6 или клиентской виртуальной машины (только с разными значениями по умолчанию).

Смежные вопросы