D:\Program Files (x86)\Java\jdk1.8.0_111\bin
这个目录下的工具
jps - Lists the instrumented Java Virtual Machines (JVMs) on the target system
jarsigner - Signs and verifies Java Archive (JAR) files. =================================jconsole本地进程
远程进程=================================
java mission controljmc=================================jvisualVM本地
远程 jstatd连接 jmx连接 两种地址 1、ip:port 2、jmx service url (service:jmx:rmi:///jndi/rmi://192.168.3.15:9999/jmxrmi) service:jmx:rmi:///jndi/rmi://localhost:7091/jmxrmi service:jmx:rmi:///jndi/rmi://<hostname>/jmxrmi另外我们还可以为VisualVM安装一些插件,比如GC,MBeans等等。满足自己的需要。 =================================jstatdjstatd是一个rmi的server应用,用于监控jvm的创建和结束,并且提供接口让监控工具可以远程连接到本机的jvm 。jstatd位于 $JAVA_HOME/bin目录下 jstatd是一个监控 JVM 从创建到销毁过程中资源占用情况并提供远程监控接口的 RMI ( Remote Method Invocation ,远程方法调用)服务器程序,它是一个 Daemon 程序,要保证远程监控软件连接到本地的话需要 jstatd 始终保持运行。 jmxJMX:Java Management Extensions ,即 Java 管理扩展 , 是一个为应用程序、设备、系统等植入管理功能的框架。 JMX 可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用 。而Visual VM是通过 JMX 来和远程 Java 应用联系的================================= 在需要被监控的服务器上面,通过jstatd来启动RMI服务 新建文件,编辑内容,启动守护,再visualVM添加jstatd连接[root@localhost bin]# pwd/root/jdk1.8.0_144/bin jstatd运行需要通过 -J-Djava.security.policy=*** 指定安全策略,因此我们需要在服务器上建立一个指定安全策略的文件jstatd.all.policy ,文件内容如下:
[root@localhost bin]# cat jstatd.all.policy
grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission;};grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission;};
上面内容格式不正确,可能导致不能正常连接
看man jstatd,里面都有解释
-Joption Passes option to the JVM, where option is one of the options described on the reference page for the Java application launcher. For example, -J- Xms48m sets the startup memory to 48 MB. See java(1).
[root@localhost bin]# ./jstatd -J-Djava.security.policy=jstatd.all.policy默认就是1099
jstatd -J-Djava.security.policy=/root/jstatd.policy -p 2099
要使Java VisualVM 成功连接到远程服务器上,服务器端应该在 /etc/hosts 文件中把本机地址设为本机的 IP 地址。使用 hostname -i 命令查看,如果显示的是 127.0.0.1 或者与本机实际 IP 不一致的话,需要把 /etc/hosts 文件中相应的地址改为本机实际 IP 。
[root@localhost ~]# jstatd -J-Djava.security.policy=/root/jdk1.8.0_144/bin/jstatd.all.policy -J-Djava.rmi.server.logCalls=true
Jun 17, 2019 2:43:02 PM sun.rmi.server.UnicastServerRef logCallFINER: RMI TCP Connection(1)-127.0.0.1: [127.0.0.1: sun.rmi.registry.RegistryImpl[0:0:0, 0]: void rebind(java.lang.String, java.rmi.Remote)]Jun 17, 2019 2:43:02 PM sun.rmi.server.UnicastServerRef logCallFINER: RMI TCP Connection(2)-127.0.0.1: [127.0.0.1: sun.rmi.transport.DGCImpl[0:0:0, 2]: java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[], long, java.rmi.dgc.Lease)]Jun 17, 2019 2:43:02 PM sun.rmi.server.UnicastServerRef logCallFINER: RMI TCP Connection(3)-192.168.3.169: [192.168.3.169: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]Jun 17, 2019 2:43:07 PM sun.rmi.server.UnicastServerRef logCallFINER: RMI TCP Connection(3)-192.168.3.169: [192.168.3.169: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]Jun 17, 2019 2:43:11 PM sun.rmi.server.UnicastServerRef logCall上面是没有改hosts文件时的console输出 下面是改后的console输出FINER: RMI TCP Connection(4)-192.168.3.169: [192.168.3.169: sun.tools.jstatd.RemoteVmImpl[-6199bad7:16b6432834d:-7ff8, 7381047654591843568]: public abstract byte[] sun.jvmstat.monitor.remote.RemoteVm.getBytes() throws java.rmi.RemoteException]Jun 17, 2019 2:51:01 PM sun.rmi.server.UnicastServerRef logCallFINER: RMI TCP Connection(4)-192.168.3.169: [192.168.3.169: sun.tools.jstatd.RemoteVmImpl[-6199bad7:16b6432834d:-7ff2, 5427747741497180388]: public abstract byte[] sun.jvmstat.monitor.remote.RemoteVm.getBytes() throws java.rmi.RemoteException]Jun 17, 2019 2:51:01 PM sun.rmi.server.UnicastServerRef logCallFINER: RMI TCP Connection(4)-192.168.3.169: [192.168.3.169: sun.tools.jstatd.RemoteHostImpl[-6199bad7:16b6432834d:-7fff, 8336527158749228898]: public abstract int[] sun.jvmstat.monitor.remote.RemoteHost.activeVms() throws java.rmi.RemoteException,sun.jvmstat.monitor.MonitorException]Jun 17, 2019 2:51:01 PM sun.rmi.server.UnicastServerRef logCall=================================
jps
pid java应用主类名称[root@test1 ~]# jps5729 Bootstrap5782 Jstatd PID: 5782Host: 192.168.3.15Main class: sun.tools.jstatd.JstatdPID: 5729
Host: 192.168.3.15Main class: org.apache.catalina.startup.Bootstrap
[root@test1 bin]# jps5729 Bootstrap6009 Jps[root@test1 bin]# jps -q57296024[root@test1 bin]# jps -l5729 org.apache.catalina.startup.Bootstrap6039 sun.tools.jps.Jps[root@test1 bin]# jps -m5729 Bootstrap start5994 Jps -m[root@test1 bin]# jps -lm5729 org.apache.catalina.startup.Bootstrap start6054 sun.tools.jps.Jps -lm[root@test1 bin]# jps -v5729 Bootstrap -Djava.util.logging.config.file=/root/apache-tomcat-8.5.20/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.3.15 -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcatalina.base=/root/apache-tomcat-8.5.20 -Dcatalina.home=/root/apache-tomcat-8.5.20 -Djava.io.tmpdir=/root/apache-tomcat-8.5.20/temp6069 Jps -Dapplication.home=/root/jdk1.8.0_144 -Xms8m[root@test1 bin]# jps -lvm5729 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/root/apache-tomcat-8.5.20/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.3.15 -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcatalina.base=/root/apache-tomcat-8.5.20 -Dcatalina.home=/root/apache-tomcat-8.5.20 -Djava.io.tmpdir=/root/apache-tomcat-8.5.20/temp6084 sun.tools.jps.Jps -lvm -Dapplication.home=/root/jdk1.8.0_144 -Xms8m
=================================
为tomcat 配置 jvm 启动参数,以便监控
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote-Djava.rmi.server.hostname=192.168.3.225-Dcom.sun.management.jmxremote.port=9999-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false"
==================================[root@test1 bin]# jps5729 Bootstrap6331 Jps得到pidjstat - Monitors Java Virtual Machine (JVM) statistics.[root@test1 bin]# jstat -helpUsage: jstat -help|-options jstat -