关注“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