Мы запускаем веб-приложение, которое использует Java 64bit 5 гигов -Xmx максимального размера кучи. Мы не имеем никакого контроля над кодом Java. Мы можем только настроить параметры конфигурации. Ситуация, с которой мы сталкиваемся, заключается в том, что java-процессы после того, как он занимает всю кучу, выделенную при запуске, начинает работать очень медленно, очень медленно реагируя на запросы веб-сайтов. Я предполагаю, что GC ожидает сбора неиспользуемых объектов памяти.
Изображение ниже покажет вам изображение top в linux, которое показывает критическую ситуацию процессов.
верхнее изображение процесса Java http://cp.images.s3.amazonaws.com/ForumImages/java-gc-issue.jpg
Есть ли способ, которым мы можем помочь java восстановить использованную память внутри выделенного пространства.
РЕДАКТИРОВАТЬ 1:
Я использовал некоторые из ответов ниже, чтобы получить ответ на свой вопрос. С моим вопросом было слишком сложно ответить, и это оказалось обсуждением. Я опубликую, как мне удалось контролировать циклы GC, и я выберу ответ с большим количеством голосов. Я использовал jconsole через реальный просмотрщик vnc, чтобы иметь возможность подключаться с моей машины с Windows к моей машине с Linux, работающей на tomcat.
Я использовал эти параметры для запуска процессов Java:
-Djava.awt.headless=true -server -Xms512m -Xmx5120m -Dbuild.compiler.emacs=true -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=4999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
Это тип вывода, который я получил, из jconsole через vnc viewer.
GC Образец изображения http://cp.images.s3.amazonaws.com/ForumImages/Sample_GC_Image.jpg