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