如何减少Tomcat使用的内存?

如何减少Tomcat使用的内存?

我购买了一台具有 1GB 内存的虚拟服务器来运行 Java 网站应用程序。我已经安装了 Tomcat 6.0.33。每次运行 tomcat 时,它都会占用大约 450 MB 的内存。

我尝试了各种方法来减少这种情况,我将 CATALINA_OPS 设置为

export CATALINA_OPTS="-Xms256m -Xmx256m"

我已经创建了 setenv.sh 文件并将以下内容输入其中:

JAVA_HOME="/usr/local/java"
export JAVA_HOME

JAVA_OPTS="-Xmx256m -Xms256m"
export JAVA_OPTS

CATALINA_HOME="/usr/local/tomcat"
export CATALINA_HOME

当我传递此命令时: ps -ef | grep tomcat 我有:

root      3150     1  5 15:32 pts/0    00:00:18 /usr/local/java/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Xmx256m -Xms256m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms256m -Xmx256m -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root      3217  2041  0 15:37 pts/0    00:00:00 grep tomcat

这表明我的参数确实被使用了。

有没有什么方法可以减少 tomcat 消耗的内存?谢谢。

答案1

这里的问题其实不是 Tomcat,而是 Java。Java 在许多不同的地方使用内存。Java 运行时使用它自己的内存,这将包含在您的数字中,此外,Java 将内存分为四个不同的位置:

堆:-Xms这是用于存储对象的内存,由和参数控制-Xmx

堆栈:这是用于存储程序维护的线程的堆栈帧的内存,可以通过参数进行控制-Xss

永久代内存:这是用于存储已编译类和池化字符串以及其他一些内容的内存,通常可以使用来控制,-XX:MaxPermSize尽管-XX代表调试参数,因此不能保证它在所有 JVM 上都存在。但是,默认的 Sun/Oracle 参考实现始终都有它们。

JNI 分配的内存任何使用本机方法和 JNI 的类都可能分配无限内存。这些内存来自操作系统而不是堆,如果不访问源代码,就无法知道本机类将使用多少内存。

Java 内存模型的概述可能超出了这个问题的答案范围,我在网上找不到好的简明文章/描述,但对你的问题的简短回答是,如果你想限制 Java 程序使用的绝对内存量,没有简单的方法可以做到这一点。启发式地,可能将你的-Xms-Xmx参数削减到 128m,你应该会接近,但这实际上取决于你的应用程序。

相关内容