面试题:你们项目如何排查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博客

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

#面试题目#
全部评论
排查JVM问题
点赞 回复 分享
发布于 2022-10-22 16:43 河南

相关推荐

点赞 评论 收藏
分享
评论
5
18
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务