Я пытаюсь запустить Tomcat в системе с низким объемом памяти (150-256 МБ). Несмотря на то, что я запускаю JVM с -Xmx64m (который в любом случае должен быть по умолчанию), процесс сразу занимает более 200 МБ.
Интересно, зачем самой JVM так много памяти и есть ли способ это настроить? Другие JVM лучше, чем Sun, с точки зрения низкого потребления памяти - и работают ли они с tomcat?
Помимо кучи (указывается -Xms
и -Xmx
) вам нужно включить области без кучи. Это включает
DirectByteBuffer
s взяты из), это изначально 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, чтобы освободить пространство для перманента.