JVM调优--04---dump文件分析 、arthas在线排查工具

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


dump文件

java堆转储快照

1. dump文件内容

在这里插入图片描述

2. 获取dump文件的方法

在这里插入图片描述

指令

在这里插入图片描述

jvisualvm 工具

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. dump文件分析工具

  • 使用 jhat 命令
  • 使用 jvisualvm 工具
  • 使用 MAT 工具

3.1 jhat 命令

  • jdk自带,jdk9以后就取消了

在这里插入图片描述

  • 访问端口 7000
    在这里插入图片描述
  • 使用OQL查找特定问题对象

在这里插入图片描述
在这里插入图片描述

3.2 使用 jvisualvm 工具

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.3 使用 MAT 工具

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

arthas在线排查工具

  • Arthas 是Alibaba开源的Java诊断工具

官网

https://arthas.aliyun.com/doc/

在这里插入图片描述
在这里插入图片描述

在线排查工具----arthas

为什么需要在线排查?

  • 在生产上我们经常会碰到一些不好排查的问题,例如线程安全问题,用最简单的threaddump或者heapdump不好查到问题原因。为了排查这些问题,有时我们会临时加一些日志,比如在一些关键的函数里打印出入参,然后重新打包发布,如果打了日志还是没找到问题,继续加日志,重新打包发布。对于上线流程复杂而且审核比较严的公司,从改代码到上线需要层层的流转,会大大影响问题排查的进度

启动:

在这里插入图片描述
在这里插入图片描述

arthas 常用命令

  • jvm观察jvm信息
  • thread定位线程问题
  • dashboard 观察系统情况
  • heapdump + jhat分析
  • jad反编译
    动态代理生成类的问题定位 第三方的类(观察代码)版本问题(确定自己最新提交的版本是不是被使用)
  • redefine 热替换
    目前有些限制条件:只能改方法实现(方法已经运行完成),不能改方法名, 不能改属性 m() -> mm()
  • sc - search class
  • watch - watch method
  • 没有包含的功能:jmap
arthas是一款非常强大的Java诊断工具,可以用来排查各种问题,包括内存溢出。下面是使用arthas排查内存溢出的一些步骤: 1. 查看JVM内存使用情况 可以使用arthas的`jvm`命令来查看JVM内存使用情况,包括堆内存、非堆内存、GC情况等等。例如,输入`jvm`命令后,可以看到如下信息: ``` $ jvm JVMSummary -------------------------------------------------------------------------------- PID : 12345 StartTime : 2020-01-01 00:00:00 UpTime : 1h JvmArgs : -Xms256m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m -Djava.awt.headless=true -Dfile.encoding=UTF-8 OS : Linux 4.4.0-18362-Microsoft #1-Microsoft Wed Mar 06 19:16:00 PST 2019 x86_64 Arch : amd64 Processors : 8 JvmVersion : 1.8.0_281-b09 -------------------------------------------------------------------------------- HeapMemory init:1073741824(1024.00MB), used:553289024(527.03MB), committed:1073741824(1024.00MB), max:1073741824(1024.00MB) NonHeapMemory init:2555904(2.44MB), used:51789232(49.38MB), committed:55050240(52.5MB), max:-1(-1.00MB) GC PS Scavenge count=0, time=0ms PS MarkSweep count=2, time=84ms ``` 其中,HeapMemory表示堆内存使用情况,NonHeapMemory表示非堆内存使用情况,GC表示垃圾回收情况。 2. 查看当前内存中的对象 可以使用arthas的`heapdump`命令来生成当前内存中的对象快照。例如,输入`heapdump`命令后,会在当前目录下生成一个`.hprof`文件,然后可以使用一些工具分析这个文件,比如MAT(Memory Analyzer Tool)。MAT可以用来分析内存快照,查看内存泄漏等问题。 3. 查看对象的引用关系 如果已经确定了内存泄漏的对象,可以使用arthas的`jmap`命令来查看该对象的引用关系。例如,输入`jmap -histo:live <object_id>`命令后,可以看到该对象被哪些其他对象引用,从而找到内存泄漏的原因。 4. 查看内存泄漏位置 可以使用arthas的`trace`命令来查看程序执行过程中的方法用情况,从而找到内存泄漏的位置。例如,输入`trace com.example.demo.* traceTarget`命令后,可以查看com.example.demo包下的所有类的方法用情况,并定位到内存泄漏的位置。 以上就是使用arthas排查内存溢出的一些步骤,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值