2017-05-17 12 views
2

我在Windows 7 64位上安装了Tomcat 9作为服务。我想:如何更改从命令行安装为Windows Service的Tomcat 9的Java堆大小?

  1. 看到堆大小当前配置和积极
  2. 更新服务配置持续使用不同的堆大小
  3. 验证Tomcat的实际使用新的堆大小。
  4. 做所有的命令行。

对于1和3:我天真地尝试过使用jconsole,但是我没有在那里找到进程,因为Tomcat是作为本地系统服务运行的。当我发现如何将jconsole作为本地系统帐户运行时,似乎当Tomcat作为服务安装时,JMX被停用。

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

为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的,但有关修改现有安装。另外,我对某种拙劣的方式不感兴趣,以某种方式获得理想的结果,但最好的做法是:如果能够链接到参考文档,那将是完美的。

回答

0

既然你链接到

--JvmMx

Maximum memory pool size in MB. (Not used in exe mode.)

应有助于控制堆大小的文档。

有关读取电流值等工具jvmtop可能是最简单的答案。

+0

当然这是一个JVM参数,但该参数的配置属于Tomcat9的Windows服务的配置。正如我在问题中已经说过的那样,通常的批处理文件似乎没有(或至少不同)被使用。如果您阅读上面引用的部分,您会发现初始配置不是通过修改批处理文件来完成的。 – Gustave

+0

关于我链接到的工具的任何反馈? – GhostCat

+0

可能它会遭受描述的访问问题。从它的Github页面:“监控所有可访问的,在一台机器上运行jvms”。 (入店!)。我会先尝试https://blogs.oracle.com/nbprofiler/monitoring-java-processes-running-as-a-windows-service。但我现在没有更多的时间了。 – Gustave

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的脚本启动的进程......

不应:tomcat9 -Xms512M -Xmx2G...工作?再一次,只是一个暗示,不知道。最后需要注意的是,堆只能在jvm启动时才能更改,在运行时不能在tomcat运行时显式运行(以防万一)。

+0

使用jmap我得到: 从可执行堆附加到核心4908,请稍候... 附加到核心文件的错误:Windbg错误:OpenDumpFile失败! – Gustave

+0

可能与以上针对jconsole所述的相同原因。 – Gustave

相关问题