JVM-监控及诊断工具2
jconsole
从Java5开始,在JDK中自带的Java监控和管理控制台。
用于对JVM中内存、线程和类等的监控,是一个基于JMX(Java Management Extensions)的GUI性能监控工具。
官方文档:https://docs.oracle.com/javase/7/docs/technotes/guides/management/index.html
三种连接方式
1. Local
使用JConsole连接一个正在本地系统运行的JVM,并且执行程序的和运行JConsole的需要是同一个用户。JConsole使用文件系统的授权通过RMI连接到平台的MBean服务器上,这种本地连接的监控能力只有Sun的JDK具有。
2. Remote
使用下面的URL通过RMI连接器连接一个JMX代理,service:jmx:rmi://jndi/rmi://hostName"portNum/jmxrmi
。JConsole为建立连接,需要在环境变量中设置mx.remote.credentials
来指定用户名和密码,从而进行授权。
3. Advanced
使用一个特殊的URL连接JMX代理。一般情况使用自己定制的连接器而不是RMI提供的连接器来连接JMX代理,或者是一个使用JDK1.4的实现了JMX和JMX Remote的应用。
Visual VM
Visual VM是一个功能强大额多合一故障诊断和性能监控的可视化工具。
它集成了多个JDK命令行工具,使用Visual VM可用于显示虚拟机进程及进程的配置和环境细腻些(jsp,jinfo),监视应用程序的CPU、GC、堆、方法区及线程的信息(jstat、jstack)等,甚至代替JConsole。
在JDK6 Update 7 以后,Visual VM便作为JDK的一部分发布(在JDK/bin目录下)。
此外,Visual VM也可以作为独立的软件安装
下载地址:https://visualvm.github.io/index.html
插件
Visual VM的一大特点是支持插件扩展,并且插件安装非常方便。我们既可以通过离线下载插件文件*.nbm
,然后在plugin对话框的已下载页面下,添加已下载的插件;也可以在可用插件页面下,在线安装插件。
插件下载地址:https://visualvm.github.io/pluginscenters.html
连接方式
1. 本地连接
监控本地Java进程的CPU、类、线程等
2. 远程连接
确定远程服务器的ip地址
添加JMX(通过JMX技术具体监控远端服务器哪个Java进程)
修改
bin/catalina.sh
文件,连接远程的tomcat在
.../conf
中添加jmxremote.access和jmxremote.password文件将服务器地址改为公网ip地址
设置阿里云安全策略和防火墙策略
启动tomcat,查看tomcat启动日志和端口监听
JMX中输入端口号、用户名、密码登录
主要功能
生成/读取堆内存快照
查看JVM参数和系统属性
查看运行中的虚拟机进程
生成/读取线程快照
程序资源的实时监控
其他功能(JMX代理连接、远程环境监控、CPU分析和内存分析)
MAT
MAT(Memory Analyzer Tool)工具是一款功能强大的Java堆内存分析器。可以用于查找内存泄漏以及查看内存消耗情况。
MAT是基于Eclipse开发的,不仅可以单独使用。还可以作为插件的形式嵌入在Eclipse中使用。是一款免费的性能分析工具,使用起来非常方便。
下载地址:http://www.eclipse.org/mat/downloads.php
Profiler
在运行Java的时候有时候想测试运行时占用内存情况,这时候就需要使用测试工具查看了。在eclipse里面有MAT插件可以测试,而在IDEA中也有这么一个插件,就是JProfiler。
JProfiler是由ej-technologies公司开发的一款Java应用性能诊断工具。功能强大,但是收费。
下载地址:https://www.ej-technologies.com/products/jprofiler/overview.html
特点
使用方便,界面操作友好(简单且强大)
对被分析的应用影响小(提供模板)
CPU、Thread、Memory分析功能尤其强大
支持对jdbc、nosql、jps、servlet、socket等进行分析
支持多种模式(离线、在线)的分析
支持监控本地、远程的JVM
跨平台,拥有多种操作系统的安装版本(Windows、Mac OS、Linux、FreeBSD、Solaris、AIX、HP-UX)
主要功能
方法调用:对方法调用的分析可以帮助你了解应用程序正在做什么,并找到提高其性能的方法
内存分配:通过分析堆上对象、引用链和垃圾收集能帮你修复内存泄漏问题,优化内存使用
线程和锁:JProfiler提供多种针对线程和锁的分析视图助你发现多线程问题
高级子系统:许多性能问题都发生在更高的语义级别上。例如,对于JDBC调用,你可能希望找出执行最慢的SQL语句。JProfiler支持对这些系统进行集成分析
Arthas
Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。
Arthas支持JDK6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。
官方网址:https://arthas.aliyun.com/zh-cn/
JMC
Java Mission Control(简称JMC),Java官方提供的性能强劲的工具。时一个用于对Java应用程序进行管理、监视、概要分析和故障排除的工具套件。
它包含一个GUI客户端,以及众多用来收集Java虚拟机性能数据的插件,如JMX Console(能够访问用来存放虚拟机各个子系统运行数据的MXBeans),以及虚拟机内置的高效profiling工具Java Flight Recorder(JFR)。
JMC的另一个优点就是:采用取样,而不是传统的代码植入技术,对应用性能的影响非常非常小,完全可以开着JMC来做压测(唯一影响可能是full gc多了)。