使用Java语言开发应用程序,虽然JVM帮我们进行了GC收集、清除工作;但是使用不当的话,还是会导致某些对象常驻堆空间无法给垃圾收集器清除,导致内存泄露、内存溢出等情况,今天盘点一下在项目中进行内存泄露分析和GC分析的一些常用、好用的工具。
0x01:JDK自带工具
在处理内存泄露方面JDK本身就自带了大量监控、分析工具,主要有如下一些:
0x02:Eclipse Memory Analyzer
官网有如下一段英文介绍:
The Eclipse Memory Analyzer is a fast and feature-rich Java heap analyzer that helps you find memory leaks and reduce memory consumption.
Use the Memory Analyzer to analyze productive heap dumps with hundreds of millions of objects, quickly calculate the retained sizes of objects, see who is preventing the Garbage Collector from collecting objects, run a report to automatically extract leak suspects.
大致的意思如下:
Eclipse Memory Analyzer(简称MAT)是一个快速且功能丰富的Java堆分析器,可帮助您查找内存泄漏并减少内存消耗。使用Memory Analyzer分析具有数亿个对象的高效堆转储,快速计算对象的保留大小,查看谁阻止垃圾收集器收集对象,运行报告以自动提取泄漏嫌疑者。
官网地址:https://www.eclipse.org/mat/
这款工具在分析内存泄露方面非常好用,可以图形化展示通过jmap命令打印出来的内存快照,而且是免费的。
0x03:JProfiler
JProfiler 是一个商用的主要用于检查和跟踪系统(限于Java开发的)的性能的工具。JProfiler可以通过实时的监控系统的内存使用情况,随时监视垃圾回收,线程运行状况等手段,从而很好的监视JVM运行情况及其性能。专用于分析J2SE和J2EE应用程序。它把CPU、执行绪和内存的剖析组合在一个强大的应用中。JProfiler提供许多与IDE整合和应用服务器整合的插件。JProfiler可视化的让用户可以找到效能瓶颈、抓出内存漏失(memory leaks)、并解决执行绪的问题。
官网地址:https://www.ej-technologies.com/products/jprofiler/overview.html
JProfiler唯一的不好就是需要购买版权;但是功能还是杠杠的。
0x04:Arthas
首先阿里出品必属精品,Arthas当然也非常好用。
Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题。Arthas诊断使用的是命令行交互模式,支持JDK6+,Linux、Mac、Windows 操作系统,命令还支持使用 tab 键对各种信息的自动补全,诊断起来非常利索。
代码仓库地址:https://github.com/alibaba/arthas
0x05:操作系统命令
无论怎么说,操作系统本身的命令是基础。通过Linux本身的一些命令也是可以对java进行一定程度的检查与检测的。不过根据不同的Linux版本,使用的命令可能存在一些差异,下面以CentOS为例说明:
Linux操作系统的命令非常多,涉及到内存、io、网络、磁盘等情况都可以找到相关命令来监控。具体场景再去查找相关资料进行相关处理。
0x06:GCViewer
GCViewer是一款实用的GC日志分析软件,免费开源使用,不过需要先安装jdk或者java环境才可以使用,因为它本身就是Java语言开发的。软件为GC日志分析人员提供了强有力的功能支持,大大提高分析GC日志的效率。
官网地址:https://www.tagtraum.com/gcviewer.html