zoukankan      html  css  js  c++  java
  • 记一次JAVA进程导致Kubernetes节点CPU飙高的排查与解决

    一、发现问题

    在一次系统上线后,我们发现某几个节点在长时间运行后会出现CPU持续飙升的问题,导致的结果就是Kubernetes集群的这个节点会把所在的Pod进行驱逐(调度);如果调度到同样问题的节点上,也会出现Pod一直起不来的问题。我们尝试了杀死Pod后手动调度的办法(label),当然也可以排除调度节点。但是在一段时间后还会复现,我们通过监控系统也排查了这段时间的流量情况,但应该和CPU持续占用没有关联,这时我们意识到这可能是程序的问题。
    

    二、排查问题

    这里使用kubectl top pods 命令确定CPU占用最高的pods都是哪些。
    [root@k8s-matser01 ~]# kubectl top pod
    

    三、排查问题

    Arthas
    我们这边使用了阿里的Arthas ,它是Alibaba开源的Java诊断工具。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
    
    这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
    
    我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
    
    遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
    
    线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
    
    是否有一个全局视角来查看系统的运行状况?
    
    有什么办法可以监控到JVM的实时运行状态?
    
    怎么快速定位应用的热点,生成火焰图?
    
    位到有问题的Pod后,使用kubectl exec进入Pod容器内部:
    
    kubectl -n app exec -it 49a89b2f-73c6-40ac-b6de-c6d0e47ace64-5d489d9c48qwc7t  -- /bin/bash
    在容器中下载Arthas
    
    wget https://arthas.gitee.io/arthas-boot.jar
    由于我们打包镜像中只有一个服务,所以一个Pod中也只有一个进程; 这里 1 是指PID。
    
    java -jar arthas-boot.jar 1
    
    执行进程看板 dashboard:
    
    [arthas@1]$ dashboard
    

    [arthas@1]$ thread -n 12262
    
    原文链接 https://cloud.tencent.com/developer/article/1613051
    
  • 相关阅读:
    oracle trunc()函数的用法——日期、数字
    ORACLE定时任务时间间隔设置
    Oracle JOB 间隔时间详解
    "规格"与"数量"的英文缩写是什么
    “金额”“合计”用英语怎么说?有什么区别么?
    关于狼性的团队励志名言警句
    5篇关于职场技巧的励志文章
    菜单权限分配源码奉送V2.0
    安装 SQL Server 客户端驱动程序
    一步步开发自己的博客 .NET版(9、从model first替换成code first 问题记录)
  • 原文地址:https://www.cnblogs.com/Applogize/p/15631891.html
Copyright © 2011-2022 走看看