EDAS为ECS集群和Swarm集群中部署的应用提供应用诊断功能,以此监控各应用使用的Java虚拟机的堆内存、线程、MBean。此外,您还可以使用JDK自带的jconsole或者jvisualvm实现该目的。本文介绍如何使用jconsole或jvisualvm监控ECS实例上的JVM进程。
jconsole和jvisualvm小程序默认位于
$JAVA_HOME/bin
目录下,jvisualvm也可以使用开源版。该方法适用于在本地(办公电脑环境)通过jconsole或者jvisualvm远程获取运行在ECS实例上的JVM进程的配置与运行时信息(创建ECS实例时,需为实例分配公网IPv4地址)。
配置JVM参数
登录EDAS控制台。
在左侧导航栏,单击 ,在顶部菜单栏选择地域,并在页面上方选择微服务空间,然后在应用列表页面单击具体的应用名称。
在应用详情基本信息页面的应用设置区域,单击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地址
设置完成后,返回应用详情页面,在基本信息页面的应用设置区域可以看到配置的JVM参数。
重启应用,使配置的参数生效。
在ECS实例上查看JVM进程是否开启JMX Remote端口
登录EDAS控制台。
在左侧导航栏,单击 ,在顶部菜单栏选择地域,并在页面上方选择微服务空间,然后在应用列表页面单击具体的应用名称。
在应用详情实例部署信息页面查看ECS实例的IP地址。
使用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参数章节配置的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.XX.XXX -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
在应用详情的实例部署信息页签,单击具体实例ID/名称。
在云服务器ECS控制台的实例详情页面,单击安全组页签。
在安全组列表页签,单击目标安全组操作列的配置规则,添加JMX Port的安全组规则。
在本地打开jconsole或者jvisualvm,添加该远程ECS实例上JVM的JMX监控。 下面以jvisualvm为例进行配置说明。
添加JMX连接。
配置远程JMX连接。
查看远程JVM连接监控。