arthas 工具学习记录

 
  1. 使用springboot 创建一个会出现 内存溢出的接口
@RestController
public class JvmThreadController {
    List<byte[]> memoryList = new ArrayList<>();

    @GetMapping("/memoryTest")
    public String memoryTest(int c) {
        byte[] b = new byte[c * 1024 * 1024];
        memoryList.add(b);
        return "success";
    }

}

出现的异常报错

java.lang.OutOfMemoryError: Java heap space
  1. 启动java 进程
  2. 下载arthas jar 包
  3. 启动:
    java -jar arthas-boot.jar --repo-mirror aliyun --use-http
    

alt text 启动后会自动检测运行中的java 进程,输入要检测的进程编号1(这里选择第一个)

输入dashboard alt text

使用arthas生成内存分区的火焰图:

  1. 输入:
    profiler start --event alloc
    
  2. 等待一会,获取已采集的sample的数量:
    profiler getSamples
    
  3. 等待一会停止采集,并生成html文件,后面时文件存放的地址:
    profiler stop --format html --file /home/output.html
    
  4. 将output.html文件从生产环境导出到本地,用浏览器打开:

##使用 heapdump将此时的hprof快照文件导出

heapdump /home/heapdump.hprof
  • 使用软件打开:

alt text alt text 可以看到占用内存最多的代码 alt text

– 返回顶部 –