springboot3.0+jdk17内存排查和方法

启动springboot项目后RES和SHR内存都占到3G以上,其实项目很少的代码,然后需要排查一下什么原因,以前面试才经常准备调休和查问题,这次实践还是有点凌乱。

像网上说用命令jstack 查看线程什么的,我是看了,看了一大堆内容没看到有什么有用的信息,后面改成用jmap命令,有个命令jmap -heap ,输了之后发现没反应,后面才看到JDK17已经没有这个命令了,尴尬。然后使用jmap -help看看有哪些命令

然后来吧,先找到你的java线程ps -ef | grep 项目名 找到PID

然后jmap -histo:live PID 就可以看到占用内存的对象,示例:

这里看到项目中的代码排到最下面了,其实没有很占内存,实际占内存是Byte[]数组和反射,按理说就算有些包加载也不应该去到3G的

那就dump文件下来看看了,命令:jmap -dump:live,file=/dump.data PID

结果发现直接打开也没办法看出什么,还是要用工具去分析,找了一轮,用jvisualvm吧,听说JDK自带有,结果尴尬的发现又没有了,移除了,网上下载了一个最新版本,导入后看到内容了

和上面看到差不多,第一和第二是Byte[]和反射,然后发现其中确实有些问题的,有些文件流内容比较多,想着是不是文件流没关,查看代码确实有存在

后面重新启动后发现还是高,然后网上找到一个方案,说是启动的时候指定堆大小,-Xmx1024m -Xms512m,加完之后,再top查看内存降下来

jvisualvm这个用具真的一点不好用,我想着是不是有更好的工具,听说阿里的arthas很好用,改天试试

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值