![减少Tomcat6的内存占用](https://linux22.com/image/585590/%E5%87%8F%E5%B0%91Tomcat6%E7%9A%84%E5%86%85%E5%AD%98%E5%8D%A0%E7%94%A8.png)
这是我的 setenv.bat(Windows 安装)。它是 MySQL 企业监控服务管理器。
set JAVA_HOME=D:\MYSQL_~2\SERVIC~1\java
set JAVA_OPTS= ++JvmOptions="-XX:+UseParallelOldGC" ++JvmOptions="-XX:+UseBiasedLocking" ++JvmOptions="-XX:+HeapDumpOnOutOfMemoryError" ++JvmOptions="-XX:HeapDumpPath=D:\MYSQL_~2\SERVIC~1\apache-tomcat\temp" ++JvmOptions="-Xms128m" ++JvmOptions="-Xmx256m" ++JvmOptions="-XX:MaxPermSize=256m"
我想将内存占用保持在200M以下(我的意思是通过查看任务管理器中的tomcat6.exe)。
总是超过 400M!出了什么问题?
编辑:我的setenv.bat在tomcat\bin下
答案1
-Xms
并-Xmx
分别定义最小和最大堆大小。因此,在您的配置中,堆本身将能够超过 256M。但是,您还设置了-XX:MaxPermSize=256m
定义永久代可能占用多少空间。堆和永久代是分开的,因此,根据您使用的配置,您的 JVM 可能最多占用 256M(通过 Xmx 的堆)+ 256M(MaxPermSize)= 512M 内存。
您可以尝试降低两者Xmx
,并MaxPermSize
通过设置它们以使总使用量不超过最大值来实现最大 200M 的目标。但是,这是否有效或 Tomcat 是否会因 OutOfMemoryError 而崩溃取决于部署的应用程序(不过值得一试)。
Oracle 有一个很好的指南,解释了不同代如何在其垃圾收集器调优参考(我假设您正在使用 Oracle(以前称为 Sun)JVM,因为您没有指定任何版本,但它仍然应该是最受欢迎的版本。)