全部产品
云市场

如何在本地使用 jconsole 或 jvisualvm 监控运行在 ECS实例上的 JVM 进程

更新时间:2019-01-24 17:20:03

当监控各应用使用的 Java 虚拟机的堆内存、线程、 MBean 时,除了使用 EDAS 为 ECS 集群和 Swarm 集群中部署的应用提供的 “应用诊断” 功能以外,还可以使用 JDK 自带的 jconsole 或者 jvisualvm (这两个小程序默认放在 $JAVA_HOME/bin 目录下,jvisualvm 也可以使用开源版),按照下面的步骤进行一些配置操作即可实现。

注意:该方法适用于在本地(办公电脑环境)通过 jconsole 或者 jvisualvm 远程获取运行在 ECS 实例上的 JVM 进程的配置与运行时信息,且创建 ECS 实例时需要为实例分配公网 IPv4 地址。

在被监控的应用配置 JVM 参数。

  1. 登录 EDAS 控制台,在左侧导航栏中选择 应用管理 > 应用列表

  2. 应用列表页面单击具体应用名称。

  3. 在应用详情基本信息页面的应用设置区域单击设置

  4. 应用设置对话框中单击 JVM 页签,在自定义区域设置自定义参数,然后单击配置 JVM 参数

    配置 JVM 参数

    1. -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=一个 1024 以上的端口 -Dcom.sun.management.jmxremote.rmi.port=同 com.sun.management.jmxremote.port 属性设置的端口 -Djava.rmi.server.hostname=ECS 实例的公网IP地址

    例如:

    1. -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.rmi.port=10000 -Djava.rmi.server.hostname=47.98.53.210
  5. 设置完成后,返回应用详情页面,可以在基本信息页面的应用设置区域下方看到配置的 JVM 参数。

    JVM 参数配置

  6. 重启应用,使这些参数生效。

在 ECS 实例上查看对应应用的 JVM 进程是否打开了 JMX Remote 端口

  1. 登录 EDAS 控制台,在左侧导航栏中选择 应用管理 > 应用列表

  2. 应用列表页面单击具体应用名称。

  3. 在应用详情实例部署信息页面查看 ECS 实例的 IP 地址。

  4. 使用 SSH 工具登录 ECS 实例,然后执行下面的命令,查看应用 JVM 进程否则打开了 JMX Remote 端口。

    1. [admin@izbp14664y88ubo8si0ihkz ~]$ netstat -antp | grep 10000
    2. (Not all processes could be identified, non-owned process info
    3. will not be shown, you would have to be root to see it all.)
    4. tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 6457/java

    如果 JMX Remote 端口未打开,请检查 JVM 进程命令行是否包含上面的 JVM 属性参数。

    正常的打开了 JMX Remote 端口的 JVM 进程示例如下:

    1. [admin@izbp14664y88ubo8si0ihkz ~]$ ps -ef|grep tomcat | grep -v grep
    2. admin 6457 1 1 15:46 ? 00:03:18 //bin/java -Djava.util.logging.config.file=/home/admin/taobao-tomcat-production-7.0.59.3/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Dcatalina.vendor=alibaba -Djava.security.egd=file:/dev/./urandom -Dlog4j.defaultInitOverride=true -Dorg.apache.tomcat.util.http.ServerCookie.ALLOW_EQUALS_IN_VALUE=true -Dorg.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=true -Dproject.name=b1c8a3ea-309b-43e8-b716-f52008784801 -Dtenant.id=e19f8e62-84db-4ff3-aae6-b5750a6a248a -Dalicloud.deployment.mode=EDAS_MANAGED -Dpandora.accept.foreign.ip=false -Dlog4j.defaultInitOverride=false -Dspas.identity=/home/admin/.spas_key/default -Daddress.server.domain=addr-hz-internal.edas.aliyun.com -Daddress.server.port=8080 -Dconfigserver.client.port=8000 -DJM.LOG.RETAIN.COUNT=7 -DJM.LOG.FILE.SIZE=300MB -Dtomcat.monitor.http.binding.host=172.16.129.92 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.rmi.port=10000 -Djava.rmi.server.hostname=47.98.53.210 -Dcatalina.logs=/home/admin/taobao-tomcat-production-7.0.59.3/logs -Dignore.endorsed.dirs= -classpath /home/admin/taobao-tomcat-production-7.0.59.3/bin/bootstrap.jar:/home/admin/taobao-tomcat-production-7.0.59.3/bin/tomcat-juli.jar -Dcatalina.base=/home/admin/taobao-tomcat-production-7.0.59.3 -Dcatalina.home=/home/admin/taobao-tomcat-production-7.0.59.3 -Djava.io.tmpdir=/home/admin/taobao-tomcat-production-7.0.59.3/temp org.apache.catalina.startup.Bootstrap start
  5. 在应用详情的实例部署信息页面,单击具体实例名称。

  6. 在云服务器管理控制台左侧导航栏单击本实例安全组

  7. 安全组列表页面单击配置规则,添加 JMX Port 的安全组规则。

  8. 在本地打开 jconsole 或者 jvisualvm ,添加该远程 ECS 实例上 JVM 的 JMX 监控。

    下面以 jvisualvm 为例进行配置说明:

    1. 添加 JMX 连接。

      添加 JVM 远程连接

    2. 配置远程 JMX 连接。

      配置远程 JMX 连接

    3. 查看远程 JVM 连接监控。

      查看远程 JVM 连接监控

    说明:上述配置仅为测试样例,未开启身份安全验证,如果需要在正式环境使用,请开启安全验证,由于 jconsole 、jvisualvm 是 JDK 提供的监控工具,与 EDAS 产品并无关系,更多配置请参考 jconsole 或者 jvisualvm 官方文档。