Память процесса против кучи - JVM - PullRequest
8 голосов
/ 04 февраля 2011

У нас есть веб-приложение, развернутое на сервере tomcat . Есть определенные запланированные задания, которые мы запускаем, после чего объем динамической памяти достигает пика и уменьшается, все выглядит нормально. Однако системный администратор жалуется на то, что использование памяти («top» в Linux) продолжает увеличиваться, чем больше запланированных заданий. Какова взаимосвязь между кучей памяти и памятью процессора? Можно ли управлять какими-либо настройками JVM? Я использовал JConsole для мониторинга системы.
Я форсировал сборку мусора через JConsole, и использование кучи уменьшилось, однако использование памяти на Linux оставалось высоким и никогда не уменьшалось.

Какие идеи или предложения могут помочь?

Ответы [ 3 ]

8 голосов
/ 04 февраля 2011

Память, выделенная процессом JVM, отличается от размера кучи. Размер используемой кучи может уменьшиться без фактического уменьшения пространства, выделенного JVM. JVM должна получить триггер, указывающий, что он должен уменьшить размер кучи. Как упоминает @Xepoch, это контролируется -XX:MaxHeapFreeRatio.

Однако системный администратор жалуется, что использование памяти («top» в Linux) продолжает увеличиваться по мере того, как запланированные задания выполняются.

Это потому, что у вас, скорее всего, какая-то утечка памяти. Системные администраторы, как правило, жалуются, когда видят, что процессы медленно занимают все больше места.

Какие идеи или предложения могут помочь?

Вы смотрели на количество потоков? Ваше приложение создает свои собственные потоки и отправляет их в тупик и бездействует вечно? Вы интегрируетесь с какими-либо сторонними API, которые могут использовать JNI?

4 голосов
/ 04 февраля 2011

Что, вероятно, наблюдается, это виртуальный размер, а не размер резидентного набора процесса (ов) Java?Если у вас есть цель для небольшого следа, вы можете захотеть , а не , включить -Xms или любой минимальный размер в аргументах кучи JVM и настроить 70% -XX:MaxHeapFreeRatio= на меньшее число, чтобы учесть большеагрессивное сжатие кучи.

В то же время, предоставьте более подробную информацию о том, что было замечено с комментарием, что память Linux никогда не уменьшалась?Какой показатель?

0 голосов
/ 04 февраля 2011

Вы можете использовать настройки -Xmx и -Xms для настройки размера кучи. С tomcat вы можете установить переменную окружения перед запуском:

export JAVA_OPTS=”-Xms256m -Xmx512m”

Первоначально создается куча 256 МБ с максимальным размером 512 МБ.

Еще несколько деталей: http://confluence.atlassian.com/display/CONF25/Fix+'Out+of+Memory'+errors+by+increasing+available+memory

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