面试题:你们项目如何排查JVM问题

        这个问题在我第一次面试的时候就问到了,由于有准备所以答得不错,拿到了offer。可以说这个问题是你有没有真正理解JVM各类机制的关键。且听我娓娓道来。 

        由于这个问题一般不会有博主带你手把手做,我希望通过实践来检验我们的效果。我们开始进入主题。

        一、打开Idea,在Idea下方找到Terminal

        二、打开任务管理器,找到Idea的PID (这里是8152,每次启动idea都不一样)

         三、返回Idea,学习第一个命令jmap,直接在Terminal内输入jmap

        这一命令可以看出有很多操作 我们主要进行一项操作就知道jmap用来干嘛的了 

jmap -histo:live PID(之后所有PID是你当前idea的PID)

结果如下:

 

 弹出一大堆你看不懂的东西,但是并不妨碍我们记忆jmap的用处:用jmap查看个区域使用情况

        四、jstack命令

老样子 我们直接输入jstack命令看看使用方法

 仔细看jstack -l 和 -e 中的描述

 只用看到最关键的词“locks”也就是说jstack命令可以查看各类锁的情况。而-e能看到“threads”,也就是说-e命令还可以查看线程,这两点便是我们需要记住jstack命令的效果。

        五、jstat命令(强烈要求亲自打一遍)

老样子,直接输入jstat命令查看他能干什么

实在是太多了,这里教大家一个命令 jstat -gc PID 2000 50(后面两个参数为2000ms进行一次,一共进行50次),来看效果

弹出了非常多的信息,先看前六个。如果大家了解过JVM内存空间就知道,前面六个分别指两个survivor区和一个eden区。这种方法也是一种对内存空间可视化的好道路 后面还有类似老年代信息之类的 大家可以不用深入, 只需要关注最重要的倒数第五个值“FGC”这个就是我们最为关键的信息。他直接显示了你的程序发生了多少次full gc!! 也就是说,而我们解决jvm的问题就是从某种角度来解决full gc的频繁发生。当我们用jstat命令看到了短时间内发生了多次full gc这就证明了我们需要解决掉我们的JVM问题。

        其实还有一些插接可以直接可视化的进行观察jvm内部问题,如jvisualvm,jprofiler。有兴趣的同学可以了解一下,这里我们只需要知道有这两个东西就行。

       总结

回到标题的问题,我们可以用以下四点来回答这个问题

① 使用jmap来查看各个区域使用情况

② 使用jstack 命令来查看锁和线程的使用情况

③ 使用jstat命令来查看full gc发生的次数并以此来判断程序是否需要进行调优

④ 使用jvisualvm,jprofiler插件

此内容我已放入我的java面试题内,内有各种浓缩精华,本篇重点教大家如何深入记忆这个问题

java面试题:(10条消息) Java后端面试题(个人向)_zywlka的博客-CSDN博客

希望对诸君有帮助,有不善之处欢迎指出

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值