2013-04-01 29 views
2

我在catalina.sh中设置CATALINA_OPTS,但很奇怪,这个值似乎被忽略。我在一台拥有768M RAM的机器上。以下是重现步骤Tomcat 7 - 无法获取CATALINA_OPTS堆大小工作

我在启动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。我得到以下的结果,这似乎表明,设置读取

根1164 26.0 6.2 1232968 49116点/ 0 S1中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.Bootstrap开始

我再次运行free -m,但我得到

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

这表明,使用512MB。 我不知道我在做什么错。我也尝试设置JAVA_OPTS,但那也不起作用。

我在CentOS 6 JDK7和Apache Tomcat 7.

EDIT 1:下面是如果我分别

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

设置-Xmx值128和64的结果
 total  used  free  shared buffers  cached 
     768  366  401   0   0   32 

看起来像-Xms设置根本没有任何作用,并且使用-Xmx设置的值大约超过250MB。

这很难解释。这是一个普通的香草Tomcat 7安装,没有安装webapps(默认的除外)。当然,他们不需要250 MB,是吗?

回答

1

请注意,堆不是Java获取的唯一内存块。另外,如果tomcat的启动进程使用超过64M,则JVM将高兴地分配更多的内存直到-Xmx值。但这不是所有事情 - 各种堆栈的堆栈都需要内存,以及要加载的类。还有在堆内存上的PermGen内存。

查看this article了解更多关于您正在处理的各种内存的讨论。考虑到今天的内存价格,升级服务器以获得更多内存可能会更便宜,而不是担心在此级别优化应用程序的内存消耗。

+0

嗨,感谢您的回答。我怎样才能找到250MB的内容。我虽然Tomcat是一个精简的容器,但250 MB的未使用数量太多了。 – arahant

+1

使用jconsole,与jdk一起交付的工具,以连接到您的流程。这至少会对分配的资源进行一些概述。它不会在逐字节级别上工作,但会给您更多关于可能已分配内存的印象。另外,请记住,Java进程提供诸如热点编译器之类的东西,通常针对长时间运行的进程中的性能进行了优化,而不是最小的内存占用量。您可能会停用几个jvm功能来交易内存,但首先购买更多内存会更便宜。 –

+0

PermGen空间大约150MB。减少到一半 – arahant