我在 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
启动 Tomcat
我通过执行 ps aux | 检查 Tomcat 是否接受了参数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.Bootstrap start
我再次运行 free -m
但我得到了
total used free shared buffers cached
768 558 209 0 0 20
这表明使用了 512MB。 我不确定我做错了什么。我也尝试设置 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 设置根本没有影响,并且使用了比 -Xmx 设置值高出大约 250MB 的数据。
这很难解释。这是一个普通的 Tomcat 7 安装,没有安装 web 应用程序(除了默认的)。他们肯定不会占用 250 MB,是吗?
最佳答案
请注意,堆并不是 java 获取的唯一内存块。此外,如果 tomcat 的启动进程使用了超过 64M,JVM 将愉快地分配更多内存,直到 -Xmx 值。但这还不是全部——各种堆栈的堆栈以及要加载的类都会占用内存。 PermGen 内存也位于堆内存之上。
检查 this article有关您正在处理的各种内存的更多讨论。考虑到今天的内存价格,升级服务器以获得更多内存可能比担心在此级别上优化应用程序的内存消耗更便宜。
关于java - Tomcat 7 - 无法使 CATALINA_OPTS 堆大小正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15745590/