线上系统突然CPU100%,你怎么排查?

Java研发军团

共 1869字,需浏览 4分钟

 · 2020-11-03

公司最近在招Java开发岗,居然一天内就收到200多份简历!想不到吧?
光筛选简历都用了很久,一天面好多个都快面吐了,现在想招个合适的Java开发太不容易了,需要去挖的细节太多了。
很多工作3-5年的Java开发人员,平时接触的都是一些传统项目,像上面的一些实际场景案例,根本没遇到过。一旦被面试官问到,因为接触的太少,掌握的都是零散的知识点,基本回答起来都很片面,支支吾吾的。最后只能是回家等通知…
比如我们总监最喜欢问的一个问题:线上系统突然CPU100%,你怎么排查?我这边可以给大家看一下我的解答思路:
1.先通过top命令找到消耗cpu很高的进程id,假设是2732;
top 命令是我们在 Linux 下最常用的命令之一,它可以实时显示正在执行进程的 CPU 使用率、内存使用率以及系统负载等信息。其中上半部分显示的是系统的统计信息,下半部分显示的是进程的使用率统计信息。
2.执行top -p 2732单独监控该进程
3.在第2步的监控界面输入H,获取当前进程下的所有线程信息
4.找到消耗cpu特别高的线程编号,假设是3288
5.执行jstack 2732对当前的进程做dump,输出所有的线程信息
6.将第4步得到的线程编号3288转成16进制是0xCD8
7.根据第6步得到的0xCD8在第5步的线程信息里面去找对应线程内容
8.解读线程信息,定位具体代码位置

最后根据线程名称相关信息进行具体排查(这里明显是GC线程占用了CPU)


JVM、多线程、数据结构和算法、高并发、设计模式这些内容,基本上都会被问到,面试官会通过这些内容评估Java开发人员的技术栈,如果这些不掌握的话基本直接GG了。
上面这些答上来才会进入真正的面试环节。大厂面试必问JVM,那么请大家尝试回答一下以下关于JVM的问题:
1、JVM内存区域有哪些?为什么这么划分?
2、JVM 垃圾回收时如何确定垃圾?GC Roots有哪些?
3、堆和栈的区别是什么?Java中的数组是存储在堆上还是栈上的? 
4、Java中的对象创建有多少种方式? 对象创建的过程是怎么样的? 
5、你做过JVM 参数调优和参数配置吗?请问如何查看 JVM 系统默认值?
6、对于 JDK 自带的监控和性能分析工具用过哪些?
7、怎么看死锁的线程?
8、JVM内存泄漏与内存溢出的区别,怎么排查内存泄漏?
9、一个亿级流量系统,让它几乎不发生Full GC。你来进行JVM调优,怎么做?
怎么样?你能答上来多少?自信能答对的又有多少?

关于JVM 很多面试都会深挖到底层的汇编、Linux服务器实战等,因为可以通过JVM排查到许多高并发高可用问题,甚至在问题产生前就把问题解决。如果面试的时候可以主动深入讲解JVM调优实战,绝对可以让面试官眼前一亮,给面试加分。
为了让大家有针对性的提升JVM调优技术,我特邀前58架构师King老师带来JVM精品之底层设计与调优实战》实战直播课,从JVM运行时数据区、垃圾回收算法与垃圾回收器、JVM常见面试题解析,到JVM调优工具、JVM调优实战等,让你轻松征服面试官,升职跳槽更有底气!

一、适合人群

1、具备一定Java基础;
2、想深入学习JVM性能调优;
3、近期有跳槽及面试需求;
4、立志成为高级工程师、架构师的IT人;
二、你将获得什么?

1、建立完整的JVM知识体系
以大量的实战来增加你的理解和记忆,理论结合实践,进而加深对JVM的理解。从而建立体系化的JVM知识,而不是碎片化的内容。
2、面试中获取Offer的利器
课程中以实际场景作为出发点来解答面试中的问题,助力高级Java岗位面试,让你快速成为成为Java高级、资深工程师。
3、能够对线上应用进行优化和故障排查
大量的JVM调优实战,掌握它们,你能够非常容易地定位到应用中的问题,并提供优化思路,这会让你在实际工作中事半功倍。
三、课程福利
1:提供学习直播+预习资料+源码+答疑
2:今天加入额外再赠送一份目前最“火”的【Java Github 超硬核面试 “备战” 手册】;
这套面试手册的组成内容主要有以下3大主题,5个主要模块,35个小板块:
程序员必备书单(海量典藏版)
程序员简历模板(900份)
发送暗号“666” 给小姐姐,秒通过


如遇扫码受限,请添加微信:xxktqq168
浏览 28
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报