Jconsole 远程链接Java服务

概述

Jconsole是一个相似Windows任务管理器的图形化展现工具。能够监控Java服务的CPU、内存、线程、对象等各项指标。html

Windows本地的Java服务能够在Jconsole启动的列表里面直接选,就能够链接上了;而大部分的Java服务都运行在没有GUI的Linux环境下,没法直接在Linux服务器上执行Jconsole命令。这时就须要在Windows上运行Jconsole远程链接到Linux服务器的Java服务了。网上有不少的教程,但经过实测发现都有问题,没法链接成功。经过不断查找资料并验证,终于找到了一个可行的配置方法,记录以下:java

添加Java服务的启动参数

JAVA_OPTS=
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.182.53"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=12345"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.rmi.port=12345"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.local.only=false"
  • 其中192.168.182.53是Java服务本机的IP地址;12345是Java对外服务的端口号。
  • -Dcom.sun.management.jmxremote.rmi.port=12345 这个很关键。缘由可参见:JCONSOLE的链接问题

除了8000正常端口外java还开了一个端口,而JConsole链接过来的是另外一个端口,并且重启后这个端口是随机的,每次启动JVM都会变。tcpdump抓包发现每次都链接8000以后连另外随机的端口。没办法暂时防火墙只好开高端口。bash

可能rmi.port参数就是所谓的**随机端口**?(Java小白乱猜~)
  • 不须要更改/etc/hosts文件。

配置Java服务器的防火墙

容许其余机器访问本机的12345端口。服务器

测试环境

Java服务环境:jvm

  • OS: CentOS Linux release 7.0.1406 (Core)
  • JDK: 1.8.0_181

Jconsole 环境:tcp

  • OS:Windows10 1803
  • JDK: 1.8.0_172

参考

相关文章
相关标签/搜索