阿里云K8s容器Pod中Java进程CPU占比100%排查

Posted 21aspnet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里云K8s容器Pod中Java进程CPU占比100%排查相关的知识,希望对你有一定的参考价值。

线上Java基于SpringBoot框架的服务一共4个POD节点,其中有一个节点重启之后CPU占比100%。

系统整体基于阿里云K8s部署,接入了阿里云的ARMS监控。

1.发现CPU占比100%的节点 

从上图看出这个pod只有1核,实际上这个pod是部署在node上,node是32核心的。是设置了pod的limit=1。

查看CPU核数

#cat /proc/cpuinfo 

2.到容器里看Java进程CPU占比 

#top一看确实是java 占用CPU100%

 

 3.分析Java的线程堆栈信息

这一步是确定影响性能的线程在做什么

#top -Hp 7

 #jstack 7

注意jstack只能附加进程,不能附加线程。线程需要过滤。

#jstack 7 &>jstack20220817-2216.txt

导出

其中1723和5455那几个是问题线程,查看其16进制编码

#printf "%x\\n" 5455

#jstack 7|grep 0x154f

这是从之前的jstack导出的文本文件搜索

 

 基本可以定位是ARMS导致的。

4.从阿里云自身的线程信息也可以看出是ARMS问题

 

5.火焰图查看 

从火焰图看出没有阻塞在pinpoint了,ARMS底层应该是基于pinpoint的。

 

从上面看出来不同的分析工具最终都会指向同一个结果。 

以上是关于阿里云K8s容器Pod中Java进程CPU占比100%排查的主要内容,如果未能解决你的问题,请参考以下文章

阿里云K8s容器Pod中Java进程CPU占比100%排查(线上JVM排查之一)

利用阿里云ARMS排查Java大量文件处理场景堆外内存溢出(线上JVM排障之八)

利用阿里云ARMS排查Java大量文件处理场景堆外内存溢出(线上JVM排障之八)

图解 K8S OOM 和 CPU 节流

k8s使用阿里云的私有镜像仓库

#云原生征文#深入了解k8s的Pod