У нас есть веб-приложение с Java 6, Tomcat 6, Spring Framework 3, Hibernate 4, EhCache. У нас есть проблема с чрезвычайно длинными сроками сбора мусора, которые могут занять 30 секунд или дольше, в результате чего приложение не отвечает.
В настоящее время мы тестируем, но помимо очевидного: добавьте больше памяти, мне было интересно, есть ли какие-то аспекты, которые мы могли бы настроить, чтобы сократить время сбора мусора.
Основным вкладчиком в использование памяти является EHCache, поскольку мы активно кэшируем. Но мне всегда сложно сортировать магазины EHCache (новые хранилища байтов EhCache, приводят к разным проблемам с нами, потому что графики кэшированных объектов могут быть довольно большими).
Это мои настройки для JVM
JAVA_OPTS="$JAVA_OPTS -server -Xms256m -Xmx704m XX:OnOutOfMemoryError=/usr/share/scripts/on_server_crash.sh -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat6 -XX:MaxPermSize=192m -XX:+UseConcMarkSweepGC