性能监控
对JVM运行期间的内部情况进行监控,比如JVM参数、CPU、内存、堆等信息,从而辅助进行新能调优以及解决程序运行时的一些问题,比如内存泄漏、线程死锁、锁争用、Java进程消耗CPU过高等
JDK自带的命令行工具
jps
:(JVM Process Status Tool)主要用来输出JVM中运行的进程状态信息,没有名字的就是IDEA开发工具jinfo
:打印指定Java进程的配置信息jstack
:查看某个Java进程内的线程堆栈信息jmap
:查看某个Java进程的堆内存使用情况,需要指定显示方式,可使用-histo:live
参数jstat
:JVM统计监测工具,查看各个区内存和GC情况,使用-options
查看所支持的哪些参数,指定参数进行查看jstate
:jstated
是JVM的jstat的守护进程,主要用于监控JVM的创建与终止,并提供结构,用来远程监控工具附加到本地系统上运行JVMjcmd
:JVM诊断命令工具,将诊断命令请求发送到正在运行的JVM,图形化工具就是使用该工具进行命令发送操作JVM的,比如可用来导出堆,查看Java进程,导出线程信息,执行GC等
图形化工具
jconsole
jconsole是一个JDK自带的,用于监视Java虚拟机的符合JMX的图形化工具,可监视本地和远程JVM,也可以监视和管理应用程序
直接在命令行中执行jconsole
命令即可打开该图形化工具
jmc
jmc(JDK Mission Control)Java任务控制,包括用于监视和管理Java应用程序的工具,而不会引入通常与这些类型工具相关联的性能开销
jmc在1.8_202版本是伴随JDK一起发行的,现在需要单独下载,从Oracle官网下载JDK页面查找JMC下载即可
VisualVM
VisualVM是一个基于插件(Visual GC插件是必备插件)的图形化工具,提供了有关在Java虚拟机中运行的基于Java技术的应用程序的详细信息,通常使用该工具就够了
jvisualvm在1.8版本是伴随JDK一起发行的,现在需要单独下载,从GitHub官方网站上下载即可
远程监控连接方式
IP地址填写外网IP即可,在进行连接实验时将所有防火墙端口放行,而并非单单放行设置的两个端口,否则会出现连接不上的情况
JMX连接方式
JMX连接可查看系统信息、CPU使用情况、线程、手动执行垃圾回收等比较偏向于系统级层面的信息
在服务器中配置JMX的支持,需要在tomcat的bin/catalina.sh
的第二行添加以下配置(应该是没有换行的):
CATALINA_OPTS="
-Xms800m -Xmx800m -Xmn350m -XX:SurvivorRatio=8 -XX:+HeapDumpOnOutOfMemoryError
-Dcom.sun.management.jmxremote=true
-Djava.rmi.server.hostname=IP地址
-Dcom.sun.management.jmxremote.port=访问端口
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.managementote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
"
jstatd连接方式
jstatd连接可查看JVM内存分布详细信息、垃圾回收分布图、线程、甚至可以查看某个对象使用内存的大小,所以在VisualVM中需要手动添加JMX后即可看到CPU使用情况
在服务器中配置jstatd的支持,需要在tomcat根目录自定义一个java.policy
文件,根据JDK版本的不同挑选添加以下授权信息**(JDK是从Oracle官网下载的rpm包,并非yum在线安装的)**
若是JDK11使用下面配置
grant codebase "jrt:/jdk.jstatd"{
permission java.security.AllPermission;
};
grant codebase "jrt:/jdk.internal.jvmstat"{
permission java.security.AllPermission;
};
若是JDK8使用下面配置
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
启动tomcat后,并执行jstatd -J-Djava.rmi.server.hostname=IP地址 -J-Djava.security.policy=java.policy -p 端口号 &
命令,默认端口是1099
Comments NOTHING