首页 > 系统相关 >Java进行内存泄露​ GC 分析都有哪些常用好用的工具

Java进行内存泄露​ GC 分析都有哪些常用好用的工具

时间:2023-06-02 15:05:00浏览次数:49  
标签:Java 查看 GC 内存 Linux 好用 加载


使用Java语言开发应用程序,虽然JVM帮我们进行了GC收集、清除工作;但是使用不当的话,还是会导致某些对象常驻堆空间无法给垃圾收集器清除,导致内存泄露、内存溢出等情况,今天盘点一下在项目中进行内存泄露分析和GC分析的一些常用、好用的工具。

0x01:JDK自带工具

在处理内存泄露方面JDK本身就自带了大量监控、分析工具,主要有如下一些:

  • jps:可查看当前系统运行的所有java进程
  • jstat:查看具体某个Java进程的GC情况
  • jmap: 查看某个Java进程的堆内存使用情况
  • jvisualvm:可视化查看堆内存与metaspace占用情况
  • jstack:查看具体某个java进行的线程堆栈情况

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分析具有数亿个对象的高效堆转储,快速计算对象的保留大小,查看谁阻止垃圾收集器收集对象,运行报告以自动提取泄漏嫌疑者。

Java进行内存泄露​ GC 分析都有哪些常用好用的工具_Java

官网地址:https://www.eclipse.org/mat/

这款工具在分析内存泄露方面非常好用,可以图形化展示通过jmap命令打印出来的内存快照,而且是免费的。

0x03:JProfiler

JProfiler 是一个商用的主要用于检查和跟踪系统(限于Java开发的)的性能的工具。JProfiler可以通过实时的监控系统的内存使用情况,随时监视垃圾回收,线程运行状况等手段,从而很好的监视JVM运行情况及其性能。专用于分析J2SE和J2EE应用程序。它把CPU、执行绪和内存的剖析组合在一个强大的应用中。JProfiler提供许多与IDE整合和应用服务器整合的插件。JProfiler可视化的让用户可以找到效能瓶颈、抓出内存漏失(memory leaks)、并解决执行绪的问题。

Java进行内存泄露​ GC 分析都有哪些常用好用的工具_Java_02

官网地址:https://www.ej-technologies.com/products/jprofiler/overview.html

JProfiler唯一的不好就是需要购买版权;但是功能还是杠杠的。

0x04:Arthas

首先阿里出品必属精品,Arthas当然也非常好用。

Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题。Arthas诊断使用的是命令行交互模式,支持JDK6+,Linux、Mac、Windows 操作系统,命令还支持使用 tab 键对各种信息的自动补全,诊断起来非常利索。

Java进行内存泄露​ GC 分析都有哪些常用好用的工具_Java_03

代码仓库地址:https://github.com/alibaba/arthas

从官网可以知道Arthas有以下一些特征

  • 检查是否加载了类,或在哪里加载了类。(对于解决jar文件冲突很有用)
  • 反编译一个类以确保代码按预期运行。
  • 查看类加载器统计信息,例如,类加载器的数量,每个类加载器加载的类的数量,类加载器的层次结构,可能的类加载器泄漏等。
  • 查看方法调用详细信息,例如方法参数,返回对象,引发的异常等。
  • 检查指定方法调用的堆栈跟踪。当开发人员想知道所述方法的调用者时,这很有用。
  • 跟踪方法调用以查找慢速子调用。
  • 监视方法调用统计信息,例如qps,rt,成功率等。
  • 监视系统指标,线程状态和cpu使用情况,gc统计信息等。
  • 支持命令行交互模式,并启用了自动完成功能。
  • 支持telnet和websocket,可通过命令行和浏览器启用本地和远程诊断。
  • 支持分析器/火焰图
  • 支持JDK 6+。
  • 支持Linux / Mac / Windows。
0x05:操作系统命令

无论怎么说,操作系统本身的命令是基础。通过Linux本身的一些命令也是可以对java进行一定程度的检查与检测的。不过根据不同的Linux版本,使用的命令可能存在一些差异,下面以CentOS为例说明:

  • free:查看内存占用、剩余情况
  • top:实时监控所有进程的内存、CPU、IO等情况
  • lsof:该命令的功能很多,其中有一项功能可以查看某个进程打开的文件句柄情况
    Linux操作系统的命令非常多,涉及到内存、io、网络、磁盘等情况都可以找到相关命令来监控。具体场景再去查找相关资料进行相关处理。
0x06:GCViewer

GCViewer是一款实用的GC日志分析软件,免费开源使用,不过需要先安装jdk或者java环境才可以使用,因为它本身就是Java语言开发的。软件为GC日志分析人员提供了强有力的功能支持,大大提高分析GC日志的效率。

Java进行内存泄露​ GC 分析都有哪些常用好用的工具_Memory_04

官网地址:https://www.tagtraum.com/gcviewer.html




标签:Java,查看,GC,内存,Linux,好用,加载
From: https://blog.51cto.com/u_13538361/6402699

相关文章

  • Jmeter:Beanshell调用java代码的三种方式
    阅读文本大概需要3分钟。0x01:BeanShell控制界面介绍每次调用前重置bsh.Interpreter:可以选择True和False。如果此选项为True,则将为每个取样器重新创建解释器。传递给BeanShell的参数(=>StringParametersandString[]bsh.args):传递给BeanShell脚本的参数,参数存在以下变量中。Param......
  • 5.12 综合案例 : 简单java类
    简单java类,基础很重要,需要手,熟练无误的写出来classDept{privatelongdeptno;privateStringdname;privateStringloc;publicDept(){//必须提供无参构造方法;}publicDept(longdeptno,Stringdname,Stringloc){this.deptno=......
  • 转:Java中常见 判断是否为空
    Java中常见判断是否为空Java中常见判断是否为空 1.判断对象为空 所在包java.util.Objects  2.判断集合为空所在包org.apache.commons.lang3CollectionUtils.isEmpty(list) 3.判断字符串为空所在包org.apache.commons.lang3......
  • Java官方笔记5数字和字符串
    NumbersNumber的子类:另外还有BigDecimal和BigInteger,用于高精度计算,AtomicInteger和AtomicLong用于多线程应用。我们有时候需要用包装类而非基本数据类型,理由如下:方法入参类型为Object,只能传入对象使用包装类提供的常量,比如MIN_VALUE和MAX_VALUE使用包装类的方法来做......
  • 视频直播网站源码,Java过滤相同name的字符
    视频直播网站源码,Java过滤相同name的字符第一种 privatestaticStringss(Stringname)  {    String[]str=name.split(",");    if(str.length==0)    {      returnnull;    }    List<String>list=ne......
  • FastJson转Java对像字段不区分大小写
    昨天遇到参数key大小写不一致导致校验签名失败的问题,查了很长时间才找到原因。看了一下FastJson源码,发现JSON.toObject中转换成对象的时候会忽略大小写。所以,当使用了JSON.toObject将json转成Java对象后,再用JSON.toObject转成json,key值就变了。写个方法验证一下:publicclassPe......
  • 用Java爬虫轻松抓取网页数据
    Java爬虫可以自动化地从互联网上采集各种数据,可以帮助企业分析竞争对手的网页排名,优化自己的网站,提高搜索引擎排名。那么如何开始爬虫呢?Java爬虫的具体步骤如下:1、确定爬取目标确定需要爬取的网站、页面和数据。2、分析网页结构通过浏览器开发者工具或者其他工具,分析目标网站......
  • Java 8新特性之Stream流
    Java8新特性之Stream流什么是Stream流Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。是一个来自数据源的元素队列并支持聚合操作元素是特定类型的对象,形成一个队列。Java中的Stream并不会存储元素,而是按需计算。......
  • 浏览器不好用?插件来帮忙
    一、目的浏览器本身具备的功能并不完善,不同的用户可以为自己浏览器增加想要功能,使得浏览器更能符合自己的需求,提高浏览器使用的舒适度二、推荐插件AdblockPlusLastPass(密码记录,全平台通用)DarkReader(亮暗主题)…三、安装插件1.Edge浏览器安装插件点击左上角的拼图图标,进入管理拓......
  • java爬虫详解及简单实例
    java爬虫是一种自动化程序,可以模拟人类在互联网上的行为,从网站上抓取数据并进行处理。下面是Java爬虫的详细解释:1、爬虫的基本原理Java爬虫的基本原理是通过HTTP协议模拟浏览器发送请求,获取网页的HTML代码,然后解析HTML代码,提取需要的数据。爬虫的核心是HTTP请求和HTML解析。2......