Назад | Перейти на главную страницу

Потребление памяти JVM

Я пытаюсь запустить Tomcat в системе с низким объемом памяти (150-256 МБ). Несмотря на то, что я запускаю JVM с -Xmx64m (который в любом случае должен быть по умолчанию), процесс сразу занимает более 200 МБ.

Интересно, зачем самой JVM так много памяти и есть ли способ это настроить? Другие JVM лучше, чем Sun, с точки зрения низкого потребления памяти - и работают ли они с tomcat?

Помимо кучи (указывается -Xms и -Xmx) вам нужно включить области без кучи. Это включает

  • Perm Gen, который изначально составляет 64 МБ на 32-битных системах и 96 МБ на 64-битных системах
  • Кэш кода, который составляет от 20 до 40 МБ в зависимости от JVM
  • Буферная область NIO (где DirectByteBuffers взяты из), это изначально 64mb

Также есть рабочее пространство самой JVM, которое будет несколько десятков мб.

Вы также должны знать о Автоматическое изменение размера Sun JVM при использовании машины серверного класса. Со временем определение класса сервера (2 ГБ памяти, более одного ядра) претерпела некоторое снижение стоимости, и теперь большинство машин могут запускать -server оптимизации. Мой совет - всегда указывать -Xms и -Xmx настройки и пройти -server если только вы не можете придумать вескую причину, тоже.

С параметром -Xmx вы ограничиваете размер куча что JVM резервирует ... JVM требует дополнительных ресурсов ...

«Спасибо за память» * - хорошая статья, в которой объясняется, как JVM использует память ...

Кроме того, вы можете попробовать IBM JVM, она должна работать с Tomcat, не знаю, работают ли некоторые из бесплатных реализаций JVM.

Тем не менее, я не думаю, что машина с таким низким объемом памяти принесет вам пользу. Java просто нужна память.

* Поскольку новые пользователи не могут отправлять гиперссылки, вам нужно найти эту статью самостоятельно ... это первое попадание в Google для "спасибо за память, IBM".

Также попробуйте JRockit JVM, которая занимает меньше памяти. Вы по-прежнему можете бесплатно загрузить лицензионные версии JRockit от BEA. то есть версии до того, как Oracle захватила BEA.

Видеть http://forums.oracle.com/forums/thread.jspa?threadID=816133&tstart=0 ссылки для скачивания.

Я нашел один полезный метод - использовать JMX-мониторинг, чтобы точно увидеть, сколько памяти используется кучей и пространством permgen.

Настройте JMX в Tomcat, как описано здесь http://tomcat.apache.org/tomcat-6.0-doc/monitoring.html

Затем используйте JConsole (поставляется с JDK 5 или JDK 6) - тег памяти будет отслеживать потребление памяти с течением времени.

Также - остерегайтесь программных перезапусков веб-приложений. Если вы перезагрузите веб-приложение, пространство permgen не будет собираться мусором и со временем будет накапливаться. Вам необходимо выполнить полную остановку / запуск Tomcat, чтобы освободить пространство для перманента.