Подтвердить что ты не робот

Чрезвычайно длительное время сбора мусора

У нас есть веб-приложение с 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
4b9b3361

Ответ 1

Чтобы сократить время GC, самое лучшее, что вы можете сделать, это использовать память кучи. Если вы можете перемещать как можно больше ваших больших данных, вы можете сократить время полного GC до 10 миллисекунд даже с 100 м Мбайт памяти кучи. Я считаю, что Ehcache поддерживает хранилища данных кучи, но если это не так, или вы не можете его использовать, я предлагаю вам взглянуть на альтернативы, которые делают.

Учитывая, что у вас есть только максимальный объем памяти 700 МБ, похоже, вы работаете на сервере с очень ограниченной памятью. В противном случае я предлагаю начать с максимум 8 или 16 ГБ и уменьшить размер памяти, если вы считаете, что вам это действительно не нужно.

Ответ 2

Существует отличный инструмент от людей FourSquare. Проверьте эту ссылку и быстрый пример. Инструмент Foursquare Heap.. Основываясь на диагностике, которую вы найдете в любом из вышеперечисленных инструментов, наиболее подходящим решением для решения проблемы будет либо добавление большего количества ОЗУ, либо добавление мощности к вашему процессору процессора. Если вы открыты для каких-либо изменений в инфраструктуре, проверьте Zing из Azul Systems. Но я думаю, что второй вариант может быть растянутым.