我在catalina.sh中设置CATALINA_OPTS但奇怪的是这个值似乎被忽略了。我在一台768M RAM的机器上。以下是重现的步骤
我在运行free -m
启动Tomcat之前检查内存。我得到以下
total used free shared buffers cached
768 43 724 0 0 16
我在catalina.sh的第一行设置了CATALINA_OPTS,如下所示:
export CATALINA_OPTS="-Xms64M -Xmx256M"
然后我使用./startup.sh
我通过执行ps aux | grep tomcat
检查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 /共享/ 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.Bootstrap start
我再次运行free -m
但我得到了
total used free shared buffers cached
768 558 209 0 0 20
这表明使用了512MB。 我不确定我做错了什么。我也尝试过设置JAVA_OPTS,但这也不起作用。
我使用JDK7和Apache Tomcat 7在CentOS 6上。
编辑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设置完全没有效果,并且正在使用超过-Xmx设置值的大约250MB。
这很难解释。它是一个普通的Tomilla 7安装,没有安装任何webapps(默认的除外)。当然,他们不需要250 MB,是吗?
答案 0 :(得分:1)
请注意,堆不是java获取的唯一内存块。此外,如果tomcat的启动过程耗尽超过64M,JVM将很乐意为-Xmx值分配更多内存。但这不是一切 - 各种堆栈的堆栈占用内存,以及要加载的类。 PermGen内存也是在堆内存之上的。
检查this article,了解有关您正在处理的各种内存的更多讨论。鉴于今天的内存价格,升级服务器以获得更多内存可能比担心优化此级别应用程序的内存消耗更便宜。