如何从命令行更改作为Windows服务安装的Tomcat 9的Java堆大小?

时间:2017-05-17 06:47:57

标签: java tomcat java-8 windows-7-x64

我在Windows 7 64位上安装了Tomcat 9作为服务。我想:

  1. 查看当前配置的堆大小并激活
  2. 持久更新服务配置以使用不同的堆大小
  3. 验证Tomcat是否实际使用新堆大小。
  4. 从命令行执行所有操作。
  5. 对于1和3:我天真地试图使用jconsole,但是我找不到那个进程,因为Tomcat是作为本地系统服务运行的。虽然我发现如何将jconsole作为本地系统帐户运行,但是当Tomcat作为服务安装时,似乎停用了JMX。

    因此,通过JMX查找当前使用的内存大小似乎至少非常复杂(可能启用JMX远程,应该通过TLS ...)。

    For 2:我认为this是Tomcat文档的对应位置,其中包含:

     To update the service parameters, you need to use the //US// parameter.
    
     Update the service named 'Tomcat9'
     C:\> tomcat9 //US//Tomcat9 --Description="Apache Tomcat Server - http://tomcat.apache.org/ " ^
          --Startup=auto --Classpath=%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\bin\bootstrap.jar
    

    但我不能充分理解该文字,以便将其应用于我的问题。特别是,我不想改变其他参数(如描述,启动等)。

    据我了解,当作为服务运行时,配置存储在Windows注册表中,因此tomcat / conf中的常规配置不会或至少部分适用。

    请注意,此问题不是关于安装Tomcat,而是关于修改现有安装。此外,我对一些hacky方式不感兴趣,以某种方式获得所需的结果(不知何故),但最好的做法是做到这一点;为此提供参考文档的链接是完美的。

2 个答案:

答案 0 :(得分:0)

根据您链接的文档

  

- JvmMx

     

最大内存池大小(MB)。 (不在exe模式下使用。)

应该有助于控制堆大小。

要获取当前值,jvmtop等工具可能是最简单的答案。

答案 1 :(得分:0)

对于1和3,有jmap。您只需要知道运行tomcat实例的进程ID。

jmap -heap 7082

以下是我现在正在运行的jvm的输出(相关行):

Heap Configuration:
MinHeapFreeRatio    = 0
MaxHeapFreeRatio    = 100
MaxHeapSize         = 1073741824 (1024.0MB) // that is -Xmx flag

.... 

NewSize             = 357564416 (341.0MB) // 1
MaxNewSize          = 357564416 (341.0MB)
OldSize             = 716177408 (683.0MB) // 2

1 + 2 = -Xms flag

不幸的是我无法回答2,因为我从未在Windows上启动过tomcat - 作为一项服务(我几乎不知道这对Windows来说意味着什么)。但假设这是一个由Windows作为脚本启动的过程...

不应该tomcat9 -Xms512M -Xmx2G...工作吗?再次,只是一个提示,不确定。最后要注意的是,只有在jvm启动时才能更改堆,在运行时你不能这样做,而tomcat运行得很明显(以防万一......)。