Java GC бесплатное приложение - PullRequest
0 голосов
/ 14 октября 2011

Используя jmx и отслеживая веб-приложение, я замечаю, что когда GC (G1) запущен, все потоки замораживаются, и приложение не отвечает. Я настроил Tomcat JVM следующим образом:

-Xms2048m
-Xmx2048m
-XX:NewSize=512m
-XX:MaxNewSize=512m
-XX:PermSize=512m
-XX:MaxPermSize=512m
-XX:+DisableExplicitGC
-Xss2m
-XX:+CMSClassUnloadingEnabled
-XX:+UseG1GC
-Djava.net.preferIPv4Stack=true
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8338
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
-Dhazelcast.logging.type=slf4j 

Приложение не отвечает, когда используемая память кучи достигает максимального предела (2 ГБ) и ГХ глубоко работает с памятью. После работы gc используемая куча уменьшается до 300Mb. Можно ли настроить другой способ работы для GC? Это большая проблема для моего приложения, потому что я использую hazelcast и jgroups, и каждый раз, когда gc работает, это вызывает разделение кластера.

Некоторые специальные библиотеки, которые я использую в этом веб-приложении: 1) Hazelcast 1.9.4 2) Акка 0,10 3) трикотаж 1,2

1 Ответ

0 голосов
/ 14 октября 2011

Проблема может быть настолько простой, как факт, что вам нужно -XX:UnlockExperimentalVMOptions, поскольку (AFAIK) G1GC все еще считается экспериментальным.


Существует множество других экспериментальных, специфичных для HotSpot аргументов JVM, с которыми вы можете поиграть, если это не сработает:

  • -XX:+UseParallelGC
  • -XX:+UseConcMarkSweepGC
  • и т.д ...

См. http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...