使用JProfiler排查内存溢出(OOM)

一、下载JProfiler客户端

下载地址:https://www.ej-technologies.com/download/jprofiler/files
无脑下一步,选择IDEA即可,然后集成。

二、IDEA集成JProfiler插件

使用JProfiler排查内存溢出(OOM)_第1张图片
安装完成后如果IDEA的右上角有下图标志,即为安装成功,如果没有的话,可以重启IDEA尝试。
使用JProfiler排查内存溢出(OOM)_第2张图片
接下来进行绑定客户端,如下图:
使用JProfiler排查内存溢出(OOM)_第3张图片
笔者此处使用的是Mac版本,选择后缀为app的JProfiler即可,如果为windows的小伙伴应该是在需要选择bin目录下的JProfler.exe文件。

三、测试

3.1 添加启动配置

使用JProfiler排查内存溢出(OOM)_第4张图片
在VM options中添加启动参数:

-Xms28m -Xmx56m -XX:+HeapDumpOnOutOfMemoryError

最后一句”-XX:+HeapDumpOnOutOfMemoryError“的目的就是为了当出现OOM异常时,能够将错误的dump文件生成出来。为了方便测试,这里分配的内存可以小一点。
使用JProfiler排查内存溢出(OOM)_第5张图片

3.2 测试代码

Pojo:

@Data
public class ThirdUser extends BaseEntity {

    /**
     * 用户名
     */
    private String username;

    /**
     * 年龄
     */
    private Integer age;

    /**
     * 爱好
     */
    private String hobby;

}

Service:

public void oomTest() {
    List<ThirdUser> list = new ArrayList<>();
    while(true) {
        ThirdUser thirdUser = new ThirdUser();
        thirdUser.setUsername("1");
        thirdUser.setAge(1);
        thirdUser.setHobby("ctrl");
        list.add(thirdUser);
    }
}

Controller:

@GetMapping("/oom")
@ApiOperation(value = "OOM测试", notes = "OOM测试", httpMethod = "GET")
public ApiResult<Void> oomTest() {
    thirdUserService.oomTest();
    return ApiResult.ok();
}

启动项目,访问接口,控制台输出:
使用JProfiler排查内存溢出(OOM)_第6张图片
红框中的数据表示生成的文件名,可以在项目的根目录下找到这个文件
使用JProfiler排查内存溢出(OOM)_第7张图片
直接双击打开即可,会弹出JProfiler的窗口:
使用JProfiler排查内存溢出(OOM)_第8张图片
这里我们可以清晰的看到是ThirdUser这个类耗费了我们大量的资源。同时还可以点击”线程转储“,查看错误具体出现在代码的哪一行,如图:
使用JProfiler排查内存溢出(OOM)_第9张图片

你可能感兴趣的:(IDEA工具,JProfiler)