面试遇到个问题,代码内存泄漏,内存缓慢上涨,如何快速定位到问题?

面试遇到个问题,代码内存泄漏,内存缓慢上涨,如何快速定位到问题?

面试遇到个问题,代码内存泄漏,内存缓慢上涨,如何快速定位到问题?

我说了使用jmap命令dump出内存快照,然后使用mat进行分析,找出内存占用异常的对象,然后查看线程stack,就可以定位到具体的发生内存泄漏的代码。

但面试官说这样定位问题还是太慢了……

然后我就请教一下面试官 问怎么样才快 面试官让我百度一下就知道了……

所以请教一下老师

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

看直方图?百度怎么说的哈?
我觉得就问题来说,你的回答没有问题,也并不低效。
主要可能还是面试官意图没有搞清楚。建议直接问面试官他有什么高招。

ps 内存泄露多数是由于频繁创建对象,或者创建超大对象导致的,根据这点,可以做埋点监控,计算大对象和对象创建的频率,超过一定阈值就告警,这样可以提前预测问题,以及快速介入。

  • 开发很忙Frank 提问者 #1

    嗯 网络上找到一些答案说线上环境的程序不要随便执行dump,如果运行的程序占用内存比较大,dump的过程会比较耗时,并且会引起STW。所以建议先通过jmap -histo:live 来输出一下堆内存的对象信息,或者使用viualvm实时监控堆内存信息,直接看是否有可疑对象。如果还分析不出来的话,这时候可以采用dump,然后用MAT分析。


    老师PS部分其实也是一个方向之一,做好埋点监控,并进行告警。


    PS:我自己面试过后总结的就是,可能有些问题回答的比较标准,面试官觉得大家都是这么答的,然后给我点压力测试吧,看看我还有没有什么其他的思考或者想法。然后这次面试挂了,应该也不是JVM这块没答好,并发编程答得不是很好。

    2021-10-27 13:02:47
  • 大目 回复 提问者 开发很忙Frank #2

    -histo:live也会STW,而且展示的结果只能看个大概,我个人的职业生涯中,就没哪次是靠histo解决问题的。

    2021-10-27 14:10:19
  • 我今天也遇到这样的问题:服务器运行两个星期左右,就会占用90%以上的物理内存,应该也是堆外内存溢出的吧?可是我当时没有想到。面试官让我系统说一下排查这个问题的方案,当时有点懵。老师,能给点建义么?

    2021-11-25 23:05:01
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师