内存泄露排查流程

发布于:2024-03-29 ⋅ 阅读:(43) ⋅ 点赞:(0)

一、创建内存泄露案例

package com.mxl.controller;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

@RestController
@RequestMapping(value = "/demo")
@Slf4j
public class DemoController {
    private static List<Object> list = new LinkedList<>();
    @GetMapping("/leak")
    public String leak(){
        for (int index =0;index<1000; index++){
            UserInfo userInfo = new UserInfo();
            list.add(userInfo);
        }
        return "success";
    }
    
    @Data
    class UserInfo{
        private String username;
    }
}

二、排查流程

动态监控内存

# 每隔3秒执行一次
vmstat 3 

排查发现出现内容泄露

排查jvm内存分配情况(内存分配合理)

jmap -heap 进程id

排查是否存在异常未清除类

jmap -histo:live  <pid>|sort -k 2 -g -r|less

排查回收对象情况

jmap -finalizerinfo 进程id

下载堆内存

jmap -dump:live,format=b,file=myjmapfile.hprof  进程id

堆分析工具

虚拟机堆转储快照分析工具

使用jdk的 jvisualvm工具(建议采用):

  1. 打开命令行或终端窗口。
  2. 输入 

jvisualvm 并按 Enter 键启动 

  1. 在 jvisualvm 中,选择 "File" -> "Load...",然后选择要打开的 HPROF 文件。
  2. 点击 "Open" 或 "OK" 来加载并分析 HPROF 文件。


网站公告

今日签到

点亮在社区的每一天
去签到