根据jvm和Tomcat设置堆内存之间的区别

时间:2016-06-22 10:52:03

标签: java jvm tomcat7

我在系统中安装了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的堆?

2 个答案:

答案 0 :(得分:5)

内存设置适用于JVM,而不适用于Tomcat

您可以创建单独的文件%CATALINA_HOME%\bin\setenv.bat$CATALINA_HOME/bin/setenv.sh并将环境变量放在那里。

所以我想改为设置JAVA_OPTS变量:

set JAVA_OPTS=-Xmx512m

对于Xmx:

指定内存分配池的最大大小(以字节为单位)。此值必须是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.

  

注意: -Xmx1024m之间没有空格

资源链接:

  1. How to Change JVM Heap Setting (-Xms -Xmx) of Tomcat – Configure setenv.sh file – Run catalina.sh
  2. How to Increase Apache Tomcat HeapSize (JVM Heap) in Eclipse IDE (integrated development environment) to Avoid OutOfMemory
  3. UPDATE1:设置多个Tomcat实例

    可以使用CATALINA_BASE环境变量创建多个Tomcat实例。每个实例使用一个公共二进制分发,但使用自己的conf,webapps,temp,logs和工作目录。每个实例也有自己的JVM,因此也有自己的内存池。如果您已通过JAVA_OPTS将最大内存定义为512MB,则每个实例将尝试分配最大512MB。

    有关详情,请参阅本教程:Connecting Apache's Web Server to Multiple Instances of Tomcat

    资源链接:

    1. 5 Scenarios and Best Practices for Running Multiple Instances of Tomcat or tc Server

答案 1 :(得分:0)

通过Registry

调整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的内存。

有趣的是,此设置似乎在重新启动(Tomcat)服务时通过 CATALINA_OPTS (包含 JAVA_OPTS )覆盖内存规范。

在重新启动服务时,我通过http://localhost:8080/manager/status(在JVM部分中)检查了JVM的最大内存,以便观察它。

相关帖子以及有用的答案: