根据 jvm 和 Tomcat 设置堆内存的区别
Difference between setting Heap memory in terms of jvm and Tomcat
我的系统中安装了 Java 8,并且能够从命令行查看和设置 JVM 的初始和最大堆大小。我正在使用 tomcat 7,在学习一些教程时,我找到了一种方法来更改 tomcat 的堆大小以及使用 setenv.bat 文件。
我的问题是以上两件事有何不同? tomcat 的启动脚本或批处理文件使用系统中使用 JAVA_HOME 环境变量安装的 java 8。
如果我的 JVM 堆 space 是 1024 M,我为 tomcat 设置了 512 M 堆 space,这是否意味着我的 tomcat 应用程序最多可以使用JVM 的 1024 M 堆中的 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 以指示兆字节。 The default value is 64MB
。此值的上限在 Solaris 7 和 Solaris 8 SPARC 平台上约为 4000m,在 Solaris 2.6 和 x86 平台上约为 2000m,减去开销量。所以,简单来说,你是说 Java to use Maximum of 1024 MB from available memory.
NOTE: there is NO SPACE between -Xmx
and 1024m
资源Link:
- 如何更改 Tomcat 的 JVM 堆设置 (-Xms -Xmx) – 配置
setenv.sh 文件 – 运行 catalina.sh
- 如何在 Eclipse 中增加 Apache Tomcat HeapSize(JVM 堆)IDE
(集成开发环境)避免OutOfMemory
更新 1:设置多个 Tomcat 实例
可以使用 CATALINA_BASE 环境变量创建多个 Tomcat 实例。每个实例都使用通用的二进制分发版,但使用自己的 conf、webapps、temp、logs 和工作目录。每个实例也有自己的 JVM,因此也有自己的内存池。如果您通过 JAVA_OPTS 将最大内存定义为 512MB,则每个实例将尝试分配最大 512MB。
更多详细信息,您可以阅读本教程:Connecting Apache's Web Server to Multiple Instances of Tomcat
资源Link:
通过注册表为 Tomcat 调整 Java 内存的第三种方法
使用 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 的内存。
有趣的是,此设置似乎通过 CATALINA_OPTS(包含 JAVA_OPTS) 重新启动 (Tomcat) 服务时。
我在重新启动服务时通过 http://localhost:8080/manager/status(在 JVM 部分)检查了 JVM 的最大内存以观察这一点。
具有有用答案的相关帖子:
- How to tune Tomcat 5.5 JVM Memory settings without using the configuration program
我的系统中安装了 Java 8,并且能够从命令行查看和设置 JVM 的初始和最大堆大小。我正在使用 tomcat 7,在学习一些教程时,我找到了一种方法来更改 tomcat 的堆大小以及使用 setenv.bat 文件。
我的问题是以上两件事有何不同? tomcat 的启动脚本或批处理文件使用系统中使用 JAVA_HOME 环境变量安装的 java 8。
如果我的 JVM 堆 space 是 1024 M,我为 tomcat 设置了 512 M 堆 space,这是否意味着我的 tomcat 应用程序最多可以使用JVM 的 1024 M 堆中的 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 以指示兆字节。 The default value is 64MB
。此值的上限在 Solaris 7 和 Solaris 8 SPARC 平台上约为 4000m,在 Solaris 2.6 和 x86 平台上约为 2000m,减去开销量。所以,简单来说,你是说 Java to use Maximum of 1024 MB from available memory.
NOTE: there is NO SPACE between
-Xmx
and1024m
资源Link:
- 如何更改 Tomcat 的 JVM 堆设置 (-Xms -Xmx) – 配置 setenv.sh 文件 – 运行 catalina.sh
- 如何在 Eclipse 中增加 Apache Tomcat HeapSize(JVM 堆)IDE (集成开发环境)避免OutOfMemory
更新 1:设置多个 Tomcat 实例
可以使用 CATALINA_BASE 环境变量创建多个 Tomcat 实例。每个实例都使用通用的二进制分发版,但使用自己的 conf、webapps、temp、logs 和工作目录。每个实例也有自己的 JVM,因此也有自己的内存池。如果您通过 JAVA_OPTS 将最大内存定义为 512MB,则每个实例将尝试分配最大 512MB。
更多详细信息,您可以阅读本教程:Connecting Apache's Web Server to Multiple Instances of Tomcat
资源Link:
通过注册表为 Tomcat 调整 Java 内存的第三种方法
使用 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 的内存。
有趣的是,此设置似乎通过 CATALINA_OPTS(包含 JAVA_OPTS) 重新启动 (Tomcat) 服务时。
我在重新启动服务时通过 http://localhost:8080/manager/status(在 JVM 部分)检查了 JVM 的最大内存以观察这一点。
具有有用答案的相关帖子:
- How to tune Tomcat 5.5 JVM Memory settings without using the configuration program