我在系统中安装了Java 8,并且能够从命令行查看和设置JVM的初始和最大堆大小。我使用tomcat 7,在浏览一些教程时,我发现了一种方法来改变tomcat的堆大小以及使用setenv.bat文件。
我的问题是上述两件事情有何不同? tomcat的启动脚本或批处理文件使用安装在系统中的Java 8,使用JAVA_HOME环境变量。
如果我的JVM堆空间是1024 M并且为tomcat设置了512 M堆空间,是否意味着我的tomcat应用程序可以使用来自JVM的1024 M堆的最多512 M的堆?
答案 0 :(得分:5)
内存设置适用于JVM,而不适用于Tomcat
您可以创建单独的文件%CATALINA_HOME%\bin\setenv.bat
或$CATALINA_HOME/bin/setenv.sh
并将环境变量放在那里。
所以我想改为设置JAVA_OPTS
变量:
set JAVA_OPTS=-Xmx512m
指定内存分配池的最大大小(以字节为单位)。此值必须是1024的倍数大于2MB。附加字母k或K表示千字节,或m或M表示兆字节。 The default value is 64MB
。此值的上限在Solaris 7和Solaris 8 SPARC平台上约为4000米,在Solaris 2.6和x86平台上为2000米,减去开销金额。所以,简单来说,就是说Java to use Maximum of 1024 MB from available memory.
注意:
-Xmx
和1024m
之间没有空格
可以使用CATALINA_BASE环境变量创建多个Tomcat实例。每个实例使用一个公共二进制分发,但使用自己的conf,webapps,temp,logs和工作目录。每个实例也有自己的JVM,因此也有自己的内存池。如果您已通过JAVA_OPTS将最大内存定义为512MB,则每个实例将尝试分配最大512MB。
有关详情,请参阅本教程:Connecting Apache's Web Server to Multiple Instances of Tomcat
答案 1 :(得分:0)
使用 regedit ,浏览到
HKEY_LOCAL_MACHINE > SOFTWARE > Wow6432Node > ApacheSoftwareFoundation >
Procrun 2.0 > apache-tomcat > Parameters > Java
您可以设置以下键(数据值以MB为单位):
JvmMs REG_DWORD 0x00000400 (1024)
JvmMx REG_DWORD 0x00003800 (14336)
在此示例中,Java虚拟机将始终(特别是对于Tomcat)使用至少1GB和最多14GB的内存。
有趣的是,此设置似乎在重新启动(Tomcat)服务时通过 CATALINA_OPTS (包含 JAVA_OPTS )覆盖内存规范。
在重新启动服务时,我通过http://localhost:8080/manager/status(在JVM部分中)检查了JVM的最大内存,以便观察它。
相关帖子以及有用的答案: