k8s排查Java应用CPU负载过高问题

这篇具有很好参考价值的文章主要介绍了k8s排查Java应用CPU负载过高问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.起因

因为k8s发布的pod还未加入资源的监控,在查看pod负载时发现其中pod占用1核CPU

k8s排查Java应用CPU负载过高问题

2.查找问题

2.1通过debug排查

# 首先查看存在问题的pod调度的节点是哪个,我们这里是调度到201的节点
kubectl -n beta get pod -o wide
k8s排查Java应用CPU负载过高问题

下一步可以到对应的node节点查看对应进程的信息,也可以通过debug在当前节点进行排查(当节点太多懒得登录过去时)

# node/NodeName是问题pod所在的对应节点
kubectl  -n beta  debug node/NodeName -it --image=ubuntu
k8s排查Java应用CPU负载过高问题
top命令找到所在节点进程信息,找到问题进程

查看详细线程

k8s排查Java应用CPU负载过高问题
通过top -Hp PID获取进程中相关线程的信息,可以找到Thread-7这个线程一直占用着CPU

接下来到pod中找到相关线程,然后通过转换找到这个线程的具体信息

# 因为pod没有top命令,需要用debug拷贝有问题的pod进程到新的pod叫debug-pod,使用的时ubuntu镜像
kubectl  -n beta debug -it bims-meta-depl-7f4f7bd77c-6rbhw --image=ubuntu --share-processes --copy-to=debug-pod
k8s排查Java应用CPU负载过高问题

在pod中查看拷贝过了的进程信息

拷贝过来后的经常信息已改变进程号也改变了

k8s排查Java应用CPU负载过高问题

再通过top -Hp PID找到刚刚的线程Thread-7

k8s排查Java应用CPU负载过高问题
可以看到Thread-7线程的PPID是52

将52转换为 16 进制,得到结果是34,格式是0x34

printf "%x\n" 52
k8s排查Java应用CPU负载过高问题

这是通过jstack找到对应的线程信息文章来源地址https://www.toymoban.com/news/detail-450440.html

# 进入问题pod
kubectl -n beta exec -it PoDNAME -- bash

# 查看问题java经常PID
jps -l

# jstack 查看问题进程的所有线程信息
jstack PID |grep 0x34 -A 10 -B 2
k8s排查Java应用CPU负载过高问题

到了这里,关于k8s排查Java应用CPU负载过高问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java 程序cpu占用过高排查

    取得cpu占用最高的PID: 27791 方式一 cgroup 如果输出中包含有类似 /docker/container_id 的字符串,就表示该进程在 Docker 容器中。 方式二 lsns   lsns命令查看程序的命名空间  ,如果显示的命名空间信息中有 ipc , mnt , net , pid , user , uts ,那么该 PID 很可能在一个 Docker 容器中。 方式三

    2024年02月07日
    浏览(48)
  • K8S Error getting node问题的排查思路

    在安装K8S集群或者运行过程中,大家可能会遇到 \\\"Error gettting node\\\" 的问题,例如: 排查这类问题的方法是执行如下命令查看具体错误原因: 找到最初的报错,根据不同的错误进行处理。 根据我遇到过的问题,主要有以下可能: 没有禁用swap内存 pause镜像没有下载成功(这里尤

    2024年02月13日
    浏览(33)
  • 【Kubernetes】当K8s出现问题时,从哪些方面可以排查

    前言 kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写 。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。 📕作者简介

    2024年02月14日
    浏览(30)
  • 【Java】 服务器cpu过高如何排查和解决?

    对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高。 线上系统突然运行缓慢,CPU飙升,甚至到100%,以及Full GC次数过多,接着就是各种报警:例如接口

    2024年02月11日
    浏览(48)
  • 现场问题排查-k8s(docker)上某服务pod频繁自动重启

    根因:应用内存占用不合理(个人认为)+现场配置内存不够导致频繁触发OOM引发该现象。 为啥要写这个文章? 之前没有k8s下pod频繁重启的问题处理经验,这次实战沉淀思路及过程,供后续自己处理相同问题提供参考资料 为其他遇到类似问题的人提供一些排查思路 现场反馈

    2024年02月03日
    浏览(37)
  • 【面试】线上Java程序占用 CPU 过高请说一下排查方法?

    这个问题可以说是 Java 面试的高频面试题了,有很多面试官都喜欢问这个问题,问题可能是下面这样的。 线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 这就是一个套路题,所谓套路题就是有标准的套路解法的,掌握了套路,不仅能解

    2024年02月09日
    浏览(41)
  • k8s故障排查个案:当Pod内存持续增长,OOM问题如何解决?

    pod 运行一段时间后,内存持续增长,甚至 oom 的情况. 容器化过程中,我们经常会发现 kubernetes 集群内 pod 的内存使用率会不停持续增长,加多少内存吃多少内存,如果对 cgroup 内存的构成不是很清楚的情况下,单纯看监控看不出什么问题。 经过一番查阅,目前总结出大致有

    2024年02月22日
    浏览(51)
  • 生产问题(十四)K8S抢占CPU导致数据库链接池打爆

            线上一天出现了两次数据库连接失败的大量报错,一开始以为是数据库的问题,但是想了想如果是数据库的问题,应该会有大量的应用问题         具体分析之后,发现其实是容器cpu出现了Throttled,导致大量线程阻塞         既然出现了报错,又没有发布,先

    2024年01月25日
    浏览(83)
  • 关于k8s中的node_exporter异常write: broken pipe问题排查

    公司网络更改重启服务器后,发现Prometheus监控中node节点三个挂掉了,实际上节点服务器是正常的,但是监控的node_exporter请求http://IP:9100/metrics超过10秒没有获取返回数据则认为服务挂掉。 到各个节点服务器用curl命令检测多久返回数据 time_connect :连接时间,从开始到TCP三次握

    2024年02月10日
    浏览(40)
  • K8S 1.27 动态调整容器CPU和内存资源限制,无需重启应用程序

    如果您在部署Pod时指定了 CPU 和内存资源,更改资源大小需要重新启动 Pod。到目前为止,重启对于正在运行工的作负载是一种破坏性操作。 Kubernetes 1.27 中的 alpha 功能发布。其中一项能够自动调整 Pod 的 CPU 和内存限制的大小,只需修补正在运行的 Pod 定义即可更改它们,而无

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包