面试官问:如何排除GC引发的CPU飙高?我脱口而出5个步骤

关注“Java后端技术全栈”java

回复“000”获取大量电子书面试

在工做中,当一个系统发生OOM的时候,这种问题可能会让你们很烦恼困惑,由于故障排查起来是一个综合技术的考量。在平时工做中要增长本身的知识广度,多学习,多总结,多思考,多作笔记,这才是真正的王道。后端

尤为是在线上环境中,如何分析是哪一个线程致使的CPU飙高的问题,一般大体有几个差很少固定的步骤。这个问题也是面试频率很是之高的问题之一,不少人也是靠回答这个问题而加薪。架构

常见套路步骤:less

使用top命令

使用top -H pid分布式

使用prinf %x tid微服务

使用jsack pid >pid.log工具

查阅less pid.log学习

下面就来讲一下这几个步骤。spa

top

咱们可使用top命令来查找对应使用CPU最多的进程,找到后,先记录下对应的pid(后面要用到)。

再使用Shift+P这两个快捷键能够按CPU的使用率进行排序。

top-H pid

再次使用top名,可是此次增长一个参数-H,能够查看上面找出来的pid进程中对应的线程tid,记住这时候的线程tid得记住

printf

可是此时的tid是十进制的,咱们须要把这个tid转成16进制。而后使用

printf %x tid

stack

使用jstack工具把线程信息输出到对应的日志文件中,后面使用这个日志文件内容进行分析。

jstack pid >pid.log

less

上面已经生成日志文件了,这时候可使用less命令来查找上面已经转换好的16进制的线程tid。

less pid.log

其它

另外还可使用

jstat -gcutil pid 1000 10

来查看垃圾回收的实时状况。

关于jstat的使用前参考前面的文章 工具

推荐一篇很全的线上CPU飙高的解决文章

http://woaijava.cc/blog/20111...

推荐阅读:

《Spring Cloud与Docker微服务架构实战》.pdf

《Go语言实战》.pdf

《分布式Java应用基础与实践》.pdf

相关文章
相关标签/搜索