- 使用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
- 启动java 进程
 - 下载arthas jar 包
 - 启动:
    
java -jar arthas-boot.jar --repo-mirror aliyun --use-http 
启动后会自动检测运行中的java 进程,输入要检测的进程编号1(这里选择第一个)
输入dashboard 

使用arthas生成内存分区的火焰图:
- 输入:
    
profiler start --event alloc - 等待一会,获取已采集的sample的数量:
    
profiler getSamples - 等待一会停止采集,并生成html文件,后面时文件存放的地址:
    
profiler stop --format html --file /home/output.html - 将output.html文件从生产环境导出到本地,用浏览器打开:
 
##使用 heapdump将此时的hprof快照文件导出
heapdump /home/heapdump.hprof
- 使用软件打开:
 
可以看到占用内存最多的代码
