【问题标题】:How to enable JMX on tomcat7 running as Windows service?如何在作为 Windows 服务运行的 tomcat7 上启用 JMX?
【发布时间】:2013-02-14 16:34:36
【问题描述】:

在将其发布到此处之前,我已经广泛搜索了此内容。我一直在尝试找到一种在作为 Windows 服务安装的 Tomcat 实例上启用 JMX 访问的方法。通过 startup.bat 脚本调用 Tomcat 非常简单,只需将 CATALINA_OPTS 环境变量设置为“-Dcom.sun.management.jmxremote.port=1234 -Dcom.sun.management.jmxremote.authenticate= false -Dcom.sun.management.jmxremote.ssl=false"

但我如何让 Tomcat Windows 服务 读取这些选项?我试过这个:

C:>tomcat\server\bin> service.bat install #安装Tomcat7 windows服务

C:>tomcat\server\bin> tomcat7.exe //美国//Tomcat7 ++JvmOptions "-Djava.io.tmpdir=$INSTDIR\server\temp;-XX:MaxPermSize =256m;-Dcom.sun.management.jmxremote.port=8090;-Dcom.sun.management.jmxremote.au thenticate=false;-Dcom.sun.management.jmxremote.ssl=false" --JvmMs 256 --JvmMx 1 024 #使用 //US 开关更新已安装的服务;设置 tmpdir、JMX 访问和堆大小

当我从“服务”面板启动服务时,服务无法启动,并且在 logs\tomcat7-stderr-yyyy-mm-dd.log 文件中出现以下错误:

yyyy-mm-dd hh:mm:ss Commons Daemon procrun stderr initialized 错误:无效的 com.sun.management.jmxremote.port 号:8090 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

我没有 Java 背景,我想在这里实现一些古怪的东西吗?请指教。

【问题讨论】:

  • 从未尝试过,但您检查过吗:tomcat.apache.org/tomcat-7.0-doc/windows-service-howto.html
  • 是的,我确实参考了这个页面。它表示参数 ++JvmOptions 接受以 -D 或 -X 开头的选项列表。因此,虽然它确实接受 -Djava.io.tmpdir 和 -XX:MaxPermSize 选项; -Dcom.xxx 选项似乎不受支持。
  • 邮件中有“数字”一词。所以它看起来确实“知道”你正在尝试传递一个端口#,但它不喜欢这个值。
  • 抱歉回复晚了。至于数字部分,Apache文档here说需要设置以下参数CATALINA_OPTS=-Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=%my.jmx.port% \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false所以jmxremote.port参数与我尝试定义的相同。至于端口号,我认为它是一个 TCP 端口,所以我确保它没有被使用。

标签: windows tomcat


【解决方案1】:

您也可以通过

卸载服务
service.bat remove

然后编辑 service.bat 并在 StartPath 中添加参数并添加选项

-Djavax.management.builder.initial=;-Dcom.sun.management.jmxremote.port=8090;-Dcom.sun.management.jmxremote.authenticate=false;-Dcom.sun.management.jmxremote.ssl=假的

这是我文件中的示例 StartPath

--StartPath "C:\tomcat7\" --Startup auto --JvmOptions "-Dcatalina.home=%CATALINA_HOME%;-Dcatalina.base=%CATALINA_BASE%;-Djava.endorsed.dirs=%CATALINA_HOME%\认可;-Djava.io.tmpdir=%CATALINA_BASE%\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging .properties;-Djava.rmi.server.hostname=;-Djavax.management.builder.initial=;-Dcom.sun.management.jmxremote.port=8090;-Dcom.sun.management.jmxremote.authenticate=false;- Dcom.sun.management.jmxremote.ssl=false" %JAVA_OPTS% ^

通过

重新安装服务
service.bat install

然后启动 Tomcat 以应用更改

【讨论】:

  • 我可以确认类似的事情适用于 Tomcat 8.5
【解决方案2】:

回答我自己的问题;结果比我想象的要容易。

需要执行以下操作,以便为安装为 Windows 服务的 Tomcat 启用 JMX 访问,例如名称为“ApacheTomcatWindowsServer”:

  • 使用以下命令将 Tomcat 安装为 Windows 服务(首先 cd 进入 \bin\)

service.bat install

或您的自定义脚本。

  • 使用以下命令为已安装的服务启用 Apache Service Manager:

tomcat7w.exe //MS//ApacheTomcatWindowsServer

这应该会在您的系统托盘上启动 Apache Service Monitor 程序。单击其图标。选择“配置”,单击“Java”选项卡并在“Java 选项”文本框中附加以下内容,每行一个选项:

-Dcom.sun.management.jmxremote.port=8090

-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmxremote.ssl=false

保存退出并重启服务。

  • 要连接到 JMX 控制台,请从 JDK 安装中触发 jconsole,单击“新建连接”,指定“远程进程”并输入 hostname:8090

【讨论】:

  • 这在我拔头发几个小时后救了我,谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 2021-07-11
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
相关资源
最近更新 更多