Tomcat 7 - невозможно получить размер кучи CATALINA_OPTS

Я устанавливаю CATALINA_OPTS в catalina.sh, но странно, что это значение, кажется, игнорируется. Я на машине с 768M RAM. Вот шаги для воспроизведения

Я проверяю память перед запуском Tomcat, запустив free -m, Я получаю следующее

    total       used       free     shared    buffers     cached
    768         43        724          0          0         16

Я установил CATALINA_OPTS в первой строке catalina.sh так:

export CATALINA_OPTS="-Xms64M -Xmx256M"

Затем я начинаю использовать Tomcat ./startup.sh

Я проверяю, что Tomcat принял аргументы, выполнив ps aux | grep tomcat, Я получаю следующий результат, который, кажется, указывает на то, что настройки были прочитаны

root 1164 26,0 6,2 1232968 49116 pts / 0 Sl 10:30 0:01 / usr / bin / java -Djava.util.logging.config.file = / usr / share / apache-tomcat-7.0.39 / conf / logging. properties -Djava.util.logging.manager = org.apache.juli.ClassLoaderLogManager -Xms64M -Xmx256M -Djava.endorsed.dirs = / usr / share / apache-tomcat-7.0.39 / endorsed -classpath / usr / share / apache -tomcat-7.0.39 / bin / bootstrap.jar: /usr/share/apache-tomcat-7.0.39/bin/tomcat-juli.jar -Dcatalina.base = / usr / share / apache-tomcat-7.0.39 -Dcatalina.home = / usr / share / apache-tomcat-7.0.39 -Djava.io.tmpdir = / usr / share / apache-tomcat-7.0.39 / temp org.apache.catalina.startup. Начало загрузки

Я снова бегаю free -m но я получаю

       total       used       free     shared    buffers     cached
       768        558        209          0          0         20

Это говорит о том, что было использовано 512 МБ. Я не уверен, что я делаю неправильно. Я также попытался установить JAVA_OPTS, но это тоже не сработало.

Я нахожусь на CentOS 6 с JDK7 и Apache Tomcat 7.

РЕДАКТИРОВАТЬ 1: Вот результаты, если я установлю значения -Xmx на 128 и 64 соответственно

       total       used       free     shared    buffers     cached
       768        432        335          0          0         39

а также

       total       used       free     shared    buffers     cached
       768        366        401          0          0         32

Похоже, настройка -Xms не имеет никакого эффекта, и примерно 250 МБ сверх значения параметра -Xmx используется.

Это довольно сложно объяснить. Это простая ванильная установка Tomcat 7 без установленных веб-приложений (кроме стандартных). Конечно, они не занимают 250 МБ, не так ли?

1 ответ

Решение

Обратите внимание, что куча не единственный блок памяти, который получает Java. Кроме того, если процесс запуска tomcat занимает более 64M, JVM с радостью выделит больше памяти до значения -Xmx. Но это еще не все - стеки для различных стеков занимают память, а также классы для загрузки. Существует память PermGen, которая также используется в верхней части памяти кучи.

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

Другие вопросы по тегам