如何减少Tomcat使用的内存?

stu*_*naz 6 tomcat centos tomcat6

我买了一个 1gb 内存的虚拟服务器来运行 java 网站应用程序。我已经安装了 Tomcat 6.0.33 。每次我运行 tomcat 时,它都会占用大约 450 mb 的内存。

我尝试了一切来减少它,我将 CATALINA_OPS 设置为

export CATALINA_OPTS="-Xms256m -Xmx256m"
Run Code Online (Sandbox Code Playgroud)

我已经创建了 set 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
Run Code Online (Sandbox Code Playgroud)

当我通过此命令时: 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
Run Code Online (Sandbox Code Playgroud)

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

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

小智 9

这里的问题不是真正的 tomcat,它通常是 java。java 使用内存的地方有很多。java 运行时使用它自己的内存,这将包含在您的号码中,此外,java 将内存分解为四个不同的位置:

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

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

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

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

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