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, которая также используется в верхней части памяти кучи.
Прочтите эту статью, чтобы узнать больше о памяти, с которой вы имеете дело. Учитывая сегодняшние цены на память, возможно, было бы дешевле обновить сервер, чтобы иметь больше памяти, чем беспокоиться об оптимизации потребления памяти приложением на этом уровне.