Используя 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