首页 > 其他分享 >代码逻辑死循环导致线上CPU飙升问题排查

代码逻辑死循环导致线上CPU飙升问题排查

时间:2024-03-04 23:11:39浏览次数:33  
标签:top CPU 排查 1113 线程 死循环

背景

今天下午出现告警提示线上环境机器的CPU突增到100%,持续约两分钟又回落到正常水平。

结论

文件导出时由于逻辑漏洞导致部分场景,填充excel时出现死循环,当数据填充到一定量时,就会抛异常而后捕捉到,跳出循环。

一般场景分析

一般来说,CPU高有以下几种常见原因:

业务请求和处理的并发量大,并且业务中包含较大的运算量;
业务代码存在Bug,出现了过多的冗余计算或者死循环;
由于可用内存空间不足(包括分配太小,内存没有合理释放导致的泄露),导致频繁进行垃圾回收造成的高CPU;

排查流程

出现问题时,注意是问题发生的时候,问题已经不存在了,现场已经被破坏了,如机器重启,如异常消失等,都无法通过一下方式探析,因为这类问题属于实时问题范畴。

1.使用top命令查看使用CPU过高的进程
top
2.使用 top -H -p [pid]查看使用CPU过高的线程
top -H -p 1113
3.使用jstack -l [pid]查看jvm当前的线程信息
jstack -l 1113
输出日志中,重点关注nid 的值,可以看到是16进制的,把之前使用 top -H -p 1113获取到的线程id转成16进制(比如上面的1114对应16进制45a),用这个值过滤 jstack -l 1113 | grep 45a
这样就能定位到有问题的线程了。

  

上述流程不可用,我们可以借助gc.log来分析

1.运行sz filename,会将文件下载到windows本地

2.可以使用https://gceasy.io/,用来分析gc日志,帮助我们判断问题。

排查概要

发现告警时,CPU水平已经回落了,因为CPU飙升问题的排查具有实时性的特点,借助gc.log去进行分析。

 

本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。

首发链接:https://www.cnblogs.com/lingyejun/p/18052954

标签:top,CPU,排查,1113,线程,死循环
From: https://www.cnblogs.com/lingyejun/p/18052954

相关文章

  • 死循环
     三种死循环,一般使用第二种while案列:  ......
  • Visual Studio 性能探查器排查内存泄漏
    1、自用方法介绍【1】VS使用debug模式执行程序(注意:Release模式无法看到堆栈细节!)【2】截取内存快照2、别人方法介绍【1】首先用vsattach到进程,再点调试–窗口–显示诊断工具。注意:如果用调试–性能探测器去附加进程,则内存使用率这一项是灰的,无法勾选,但是......
  • 网络问题排查必备利器:Pingmesh
    背景当今的数字化世界离不开无处不在的网络连接。无论是日常生活中的社交媒体、电子商务,还是企业级应用程序和云服务,我们对网络的依赖程度越来越高。然而,网络的可靠性和性能往往是一个复杂的问题,尤其是在具有大规模分布式架构的系统中。在过去,网络监控主要依赖于传统的点对点(poi......
  • 对于 Windows 系统的入侵排查,以下是一些基础的排查方法
    对于Windows系统的入侵排查,以下是一些基础的排查方法:检查系统日志:WindowsEventViewer中有各种日志,包括安全日志、应用程序日志等。检查这些日志是否有异常登录、异常操作等记录。扫描恶意软件:运行杀毒软件和反间谍软件来扫描系统,确保系统没有受到恶意软件感染。......
  • Windows 系统日志是记录操作系统活动的重要组成部分,对于入侵排查和溯源来说,分析系统日
    Windows系统日志是记录操作系统活动的重要组成部分,对于入侵排查和溯源来说,分析系统日志是非常关键的一步。以下是针对Windows系统日志分析和溯源的基础技术原理:事件日志:Windows操作系统生成多个类型的事件日志,包括应用程序日志、安全日志和系统日志。了解不同类型的事件日......
  • 一次线上redis慢的排查过程,发现redis根本不慢
    缓存应用场景:对话系统中,用redis来存储用户对话的上下文,用户每次说话将用户对话的上下文带给大模型进行推理,然后返回给用户回答该对话系统用在电话场景,对响应速度要求较高。代码中自己对redis的耗时进行了记录超过50毫秒报警start_time=time.time()dialogueSession=dial......
  • Go - Optimization - CPU caches
          ......
  • 在K8S中,Pod请求另一个pod偶尔出现超时或延迟,如何排查?
    在Kubernetes(K8S)中,当Pod请求另一个Pod时偶尔出现超时或延迟,可能是由于多种原因造成的。以下是一些建议的排查步骤:检查网络配置和插件:确认你的Kubernetes集群使用了合适的网络插件(如Calico、Flannel等),并且这些插件已经正确配置和部署。检查网络插件的状态和日志,确保它们正常运......
  • 在K8S中,如何查看pod状态的详情? 事件显示cpu不足如何处理?
    在Kubernetes(K8s)中,查看Pod状态的详情通常涉及使用kubectl命令行工具,这是Kubernetes提供的一个强大的管理工具。以下是如何查看Pod状态详情的步骤:1.查看Pod状态详情列出所有Pod:使用kubectlgetpods命令可以查看集群中所有Pod的概览信息,包括名称、状态、IP地址等。查看特定Pod......
  • 在K8S中,节点状态notReady如何排查?
    在Kubernetes(K8s)集群中,当一个节点(Node)的状态变为NotReady时,意味着该节点可能无法运行Pod或不能正确响应Kubernetes控制平面。排查NotReady节点通常涉及以下步骤:1.获取基本信息使用kubectl命令行工具获取节点状态:kubectlgetnodes检查具体出现问题的节点详情:k......