IDE 改jvm内存大小 打印gc处理日志 ----jprofile内存分析工具使用和分析


探讨过程:

前言

jprofile   是IDE的插件

mat 是eclipse的插件

他们都是分析内存泄漏的

jvm了解

https://www.cnblogs.com/kaibindirver/p/15977602.html

参考: 

https://zhuanlan.zhihu.com/p/109870776?from_voters_page=true

https://blog.csdn.net/axin1240101543/article/details/105142141/

下面是看狂神的

https://www.bilibili.com/video/BV1iJ411d7jS?p=10&spm_id_from=pageDriver

 -Xms  设置初始化内存分配大小   默认 1/64

 -Xmx  设置最大初内存分配    默认1/4

下面命令意思: 打印GC垃圾回收信息

-Xms1024m -Xmx1024m -XX:+PrintGCDetails

查看jvm内存大小的代码

    //    查看jvm内存大小
    @GetMapping("/getmemory")
    public Object Memory() {
        Runtime run = Runtime.getRuntime();
        long maxMemory = Runtime.getRuntime().maxMemory();
        long totalMemory = Runtime.getRuntime().totalMemory();
        long freeMemory = Runtime.getRuntime().freeMemory();
        long usableMemony = maxMemory - freeMemory + freeMemory;

        return
                "可以获得最大内存是:"+ maxMemory/1024/1024 + "M"+"\r\n"+
                "已分配到的内存大小是:"+ totalMemory/1024/1024 + "M"+"\r\n"+
                "所分配内存的剩余大小是:"+ freeMemory/1024/1024 + "M"+"\r\n"+
                "最大可用内存大小是:"+ usableMemony/1024/1024 + "M"+"\r\n";
    }

响应结果:

可以获得最大内存是:1024M
已分配到的内存大小是:1024M
所分配内存的剩余大小是:708M
最大可用内存大小是:1024M

内存溢出的话也会打印出 GC的过程,没溢出也会打印 内存Gc的过程

jprofile

IDE安装jprofile插件

客户端工具下载

https://xclient.info/s/ej-technologies--jprofiler.html

IDE配置启动的jprofile软件位置

当使用jprofile启动可以i实时查看内存使用情况

发生OOM的时候 dump文件下来(jvm内存快照)

生成Dump文件,JVM启动时添加参数:

#出现 OOME 时生成堆 dump: 
-XX:+HeapDumpOnOutOfMemoryError      
#生成堆文件地址:
-XX:HeapDumpPath=/home/xxx/logs/       

然后点击文件打开 jprofile 工具分析

 

手动jump文件

jmap -dump:live,format=b,file=myjmapfile.hprof 19570

见: https://www.cnblogs.com/kaibindirver/p/15873483.html

但是下载下来的文件没有像上面那样找到内存溢出的线程

但是可以追踪内存里的存放对象找到造成内存溢出对应的方法和第几行代码导致