【jvm】内存占用偏高分析

本文介绍了如何通过jps、jstat-gcutil和jmap-dump等工具监控JVM内存使用,发现内存泄漏,并使用MAT工具进行详细分析,特别关注了大字符串和字符数组对内存占用的影响,以及jinfo命令调整预tenure阈值的方法。
摘要由CSDN通过智能技术生成
  1. jps查看jvm进程

  2. 查看内存使用
    jstat -gcutil 1000

  3. 在内存占用最高的时候dump内存
    jmap -dump:format=b,file=dump.hprof

  4. 使用mat分析工具分析内存(jdk1.8建议使用1.11.0版本)
    mat工具注意开启key unreachable objects
    在这里插入图片描述

  5. 打开dump文件
    在这里插入图片描述

  6. 分析工具可能内存泄漏的问题
    在这里插入图片描述
    点击“detail”
    在这里插入图片描述
    点击如下图图标查看出问题的class有哪些, 图中可以看出,疑似问题出在字符串,字符串过大,一个字符串大概10m左右
    在这里插入图片描述

  7. 当然,也可以使用大盘查看内存占用情况
    在这里插入图片描述
    下图可见内存占用最多的对象
    在这里插入图片描述

  8. 查看对象关联引用
    在这里插入图片描述
    如下图可见字符数组中存储的内容每个有10m
    在这里插入图片描述

  9. 分析字符数组占内存原因
    jinfo -flags 查看jvm全部参数
    jinfo -flag PretenureSizeThreshold 查看最大对象直接进入老年代的阈值
    默认值是0,意思是不管多大都是先在eden中分配内存

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值