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

3次阅读

共计 803 个字符,预计需要花费 3 分钟才能阅读完成。

关注“Java 后端技术全栈”

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

在工作中,当一个零碎产生 OOM 的时候,这种问题可能会让大家很懊恼困惑,因为故障排查起来是一个综合技术的考量。在平时工作中要减少本人的常识广度,多学习,多总结,多思考,多做笔记,这才是真正的王道。

尤其是在线上环境中,如何剖析是哪个线程导致的 CPU 飙高的问题,通常大抵有几个差不多固定的步骤。这个问题也是面试频率十分之高的问题之一,很多人也是靠答复这个问题而加薪。

常见套路步骤:

应用 top 命令

应用top -H pid

应用prinf %x tid

应用jsack pid >pid.log

查阅less pid.log

上面就来说一下这几个步骤。

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

正文完
 0