当监控各应用使用的Java虚拟机的堆内存、线程、MBean时,除了使用EDAS为ECS集群和Swarm集群中部署的应用提供的应用诊断功能以外,还可以使用JDK自带的jconsole或者jvisualvm(这两个小程序默认位于$JAVA_HOME/bin目录下,jvisualvm也可以使用开源版)。

说明 该方法适用于在本地(办公电脑环境)通过jconsole或者jvisualvm远程获取运行在ECS实例上的JVM进程的配置与运行时信息,且创建ECS实例时需要为实例分配公网IPv4地址。
  1. 登录EDAS 控制台
  2. 在左侧导航栏中选择应用列表
  3. 应用列表页面单击具体应用名称。
  4. 在应用详情基本信息页面的应用设置区域,单击JVM参数编辑
  5. 应用设置对话框的自定义区域,设置自定义参数,然后单击配置JVM参数
    应用设置JVM页签
    -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 地址
  6. 设置完成后,返回应用详情页面,可以在基本信息页面的应用设置区域下方看到配置的JVM参数。
  7. 重启应用,使配置的参数生效。

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

  1. 登录台 EDAS 控制台
  2. 在左侧导航栏中选择应用列表
  3. 应用列表页面单击具体应用名称。
  4. 在应用详情实例部署信息页面查看ECS实例的IP地址。
  5. 使用SSH工具登录ECS实例,然后执行下面的命令,查看应用JVM进程否则打开了JMX Remote端口。

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

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

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

    [admin@izbp146****ubo8si0ihkz ~]$ ps -ef|grep tomcat | grep -v grep
                            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
  6. 在应用详情的实例部署信息页面,单击具体实例名称。
  7. 在云服务器管理控制台的实例详情页单击安全组页签。
  8. 安全组列表页签单击配置规则,添加JMX Port的安全组规则。
  9. 在本地打开jconsole或者jvisualvm,添加该远程ECS实例上JVM的JMX监控。

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

    说明 本文中的配置仅为测试样例,未开启身份安全验证,如果需要在正式环境使用,请开启安全验证。由于jconsole、jvisualvm是JDK提供的监控工具,与EDAS产品并无关系,更多配置请参考jconsole或者jvisualvm官方文档。
    1. 添加JMX连接。
      添加JMX连接
    2. 配置远程JMX连接。
      添加JMX连接对话框
    3. 查看远程JVM连接监控。
      查看远程JVM监控