Java 根据jvm和Tomcat设置堆内存的区别
我的系统中安装了Java8,可以从命令行查看和设置JVM的初始堆大小和最大堆大小。我正在使用tomcat 7,在阅读一些教程时,我发现了一种方法,可以使用setenv.bat文件更改tomcat的堆大小 我的问题是,上述两件事有何不同?tomcat的启动脚本或批处理文件使用java_HOME环境变量在系统中安装的java 8Java 根据jvm和Tomcat设置堆内存的区别,java,jvm,tomcat7,Java,Jvm,Tomcat7,我的系统中安装了Java8,可以从命令行查看和设置JVM的初始堆大小和最大堆大小。我正在使用tomcat 7,在阅读一些教程时,我发现了一种方法,可以使用setenv.bat文件更改tomcat的堆大小 我的问题是,上述两件事有何不同?tomcat的启动脚本或批处理文件使用java_HOME环境变量在系统中安装的java 8 如果我的JVM堆空间是1024 M,并且我为tomcat设置了512 M堆空间,这是否意味着我的tomcat应用程序可以从1024 M的JVM堆中使用最多512 M的堆?内
如果我的JVM堆空间是1024 M,并且我为tomcat设置了512 M堆空间,这是否意味着我的tomcat应用程序可以从1024 M的JVM堆中使用最多512 M的堆?内存设置适用于JVM,而不是tomcat 您可以创建一个单独的文件
%CATALINA_HOME%\bin\setenv.bat
或$CATALINA_HOME/bin/setenv.sh
,并将环境变量放在那里
因此,我想改为设置JAVA_OPTS
变量:
set JAVA_OPTS=-Xmx512m
对于Xmx:
指定内存分配池的最大大小(以字节为单位)。此值必须是大于2MB的1024的倍数。附加字母k或k表示千字节,或附加字母m或m表示兆字节<代码>默认值为64MB。此值的上限在Solaris 7和Solaris 8 SPARC平台上约为4000m,在Solaris 2.6和x86平台上约为2000m,减去开销。因此,简单地说,您是说Java使用可用内存的最大1024mb。
注意:在-Xmx
和1024m
资源链接:
更新1:设置多个Tomcat实例 使用CATALINA_BASE环境变量可以创建多个Tomcat实例。每个实例使用一个通用的二进制发行版,但使用自己的conf、webapps、temp、日志和工作目录。每个实例也有自己的JVM,因此也有自己的内存池。如果通过JAVA_OPTS将最大内存定义为512MB,则每个实例将尝试分配最大512MB的内存 有关详细信息,您可以浏览本教程: 资源链接: 通过注册表调整Tomcat Java内存的第三种方法 使用regedit,浏览到
HKEY_LOCAL_MACHINE > SOFTWARE > Wow6432Node > ApacheSoftwareFoundation >
Procrun 2.0 > apache-tomcat > Parameters > Java
您可以设置以下键(此处的数据值以MB为单位):
在本例中,Java虚拟机(尤其是Tomcat)将始终使用至少1GB和高达14GB的内存
有趣的是,重新启动(Tomcat)服务时,此设置似乎通过CATALINA_OPTS(包含JAVA_OPTS)覆盖内存规范
在重新启动服务时,我通过(JVM部分)检查了JVM的最大内存,以观察这一点
有帮助答案的相关帖子:
JvmMs REG_DWORD 0x00000400 (1024)
JvmMx REG_DWORD 0x00003800 (14336)