我买了一个具有1GB内存的虚拟服务器来运行java网站应用程序。 我已经安装了Tomcat 6.0.33。 每次我运行tomcat,大概需要450MB的内存。
我尽量减less这一点,我设置了CATALINA_OPS
export CATALINA_OPTS="-Xms256m -Xmx256m"
我已经创build了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
当我通过这个命令: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
这表明我的参数是真正使用的。
有没有办法减lesstomcat的内存消耗? 谢谢。
这里的问题不是真的tomcat,它一般是java。 java使用内存有许多不同的地方。 Java运行时使用它自己的内存,这将包括在您的号码,另外,Java内存分为四个不同的位置:
堆:这是用于存储对象的内存,由
-Xms和-Xmx参数控制。堆栈:这是用于stored procedures维护的线程的堆栈帧的内存,可以使用
-Xss参数进行控制。Permgen Memory:这是用来存储编译类和string以及其他一些东西的内存,通常可以用
-XX:MaxPermSize来控制,尽pipe-XX代表一个debugging参数,所以不能保证它在所有的JVM上。 但是,默认的Sun / Oracle参考实现一直都有它们。JNI分配的内存使用本地方法和JNI的任何类都可能分配无限的内存。 这个内存来自操作系统,而不是堆,没有办法知道一个本地类将使用多less内存,而无需访问源。
Java内存模型的概述可能超出了这个问题的答案的范围,我无法在互联网上find一个很好的简洁的文章/描述,但你的问题的简短答案是,如果你试图限制绝对一个Java程序使用的内存量,没有简单的方法来做到这一点。 试探性地说,可能把你的-Xms和-Xmx参数削减到128m,你应该closures,但是这将取决于你的应用程序。