作者:手机用户2502919951 | 来源:互联网 | 2023-09-09 13:00
篇首语:本文由编程笔记#小编为大家整理,主要介绍了阿里云K8s容器Pod中Java进程CPU占比100%排查相关的知识,希望对你有一定的参考价值。线上Java基于Spri
篇首语:本文由编程笔记#小编为大家整理,主要介绍了阿里云K8s容器Pod中Java进程CPU占比100%排查相关的知识,希望对你有一定的参考价值。
线上Java基于SpringBoot框架的服务一共4个POD节点,其中有一个节点重启之后CPU占比100%。
系统整体基于阿里云K8s部署,接入了阿里云的ARMS监控。
1.发现CPU占比100%的节点 ![](https://img6.php1.cn/3cdc5/c273/c5a/2ce1bff8a5549ad3.jpeg)
从上图看出这个pod只有1核,实际上这个pod是部署在node上,node是32核心的。是设置了pod的limit=1。
查看CPU核数
#cat /proc/cpuinfo ![](https://img6.php1.cn/3cdc5/c273/c5a/ed99392bcdb92c49.jpeg)
2.到容器里看Java进程CPU占比
#top一看确实是java 占用CPU100%![](https://img6.php1.cn/3cdc5/c273/c5a/0cefc83ae62fe653.jpeg)
3.分析Java的线程堆栈信息
这一步是确定影响性能的线程在做什么
#top -Hp 7
![](https://img6.php1.cn/3cdc5/c273/c5a/ec88f6d657725f12.jpeg)
#jstack 7
注意jstack只能附加进程,不能附加线程。线程需要过滤。
#jstack 7 &>jstack20220817-2216.txt
导出
其中1723和5455那几个是问题线程,查看其16进制编码
#printf "%x\\n" 5455
#jstack 7|grep 0x154f
![](https://img6.php1.cn/3cdc5/c273/c5a/a0e027048b548324.jpeg)
这是从之前的jstack导出的文本文件搜索
![](https://img6.php1.cn/3cdc5/c273/c5a/57aeb5b735235787.jpeg)
基本可以定位是ARMS导致的。
4.从阿里云自身的线程信息也可以看出是ARMS问题
![](https://img6.php1.cn/3cdc5/c273/c5a/eaadf95290e6fa9d.jpeg)
5.火焰图查看
![](https://img6.php1.cn/3cdc5/c273/c5a/6d2e6978d1d9f473.jpeg)
从火焰图看出没有阻塞在pinpoint了,ARMS底层应该是基于pinpoint的。
从上面看出来不同的分析工具最终都会指向同一个结果。