2

我在 catalina.sh 中设置 CATALINA_OPTS 但奇怪的是这个值似乎被忽略了。我在一台有 768M RAM 的机器上。以下是重现的步骤

我在启动 Tomcat 之前通过运行检查内存free -m。我得到以下

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

我在 catalina.sh 的第一行设置了 CATALINA_OPTS,如下所示:

export CATALINA_OPTS="-Xms64M -Xmx256M"

然后我使用./startup.sh

我检查 Tomcat 是否通过执行ps aux | grep tomcat. 我得到以下结果,这似乎表明该设置已被读取

根 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.属性 -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。

这个比较难解释。这是一个普通的 Tomcat 7 安装,没有安装 webapps(除了默认的)。他们肯定不会占用 250 MB,是吗?

4

1 回答 1

1

请注意,堆并不是 java 获取的唯一内存块。另外,如果tomcat的启动进程使用了​​超过64M,JVM会很乐意分配更多的内存直到-Xmx值。但这还不是全部——各种堆栈的堆栈占用内存,以及要加载的类。PermGen 内存也位于堆内存之上。

查看这篇文章,了解更多关于您正在处理的各种内存的讨论。鉴于今天的内存价格,升级服务器以获得更多内存可能比担心在此级别上优化应用程序的内存消耗更便宜。

于 2013-04-01T16:17:12.257 回答