`

java应用线上一次故障诊断分析

    博客分类:
  • java
 
阅读更多

今天项目发布,在预发布机器上居然出现应用启动不到10分钟 CPU使用率从不到1%飙升到95以上,load从不到1升到15以上,然后当然应用就不可用了,第一次还奇怪为什么10分钟后就变成这样,然后找不到原因,异常还一堆其他的异常,而且还有其他的需求一起发布,所以还怀疑其他需求的问题,然后就单独发布自己的需求代码,重新发布后大概10分钟后又出现这个问题,想了想,一堆的超时,应用访问也是超时,开始怀疑线程的问题,通过jstack dump java进程的线程栈信息,通过分析日志发现了 34个线程有16个线程的状态处于同样一处代码上的runnable状态,

 

 

"qtp1041301507-215" prio=10 tid=0x000000005aa2a800 nid=0x741d runnable [0x0000000044598000]
   java.lang.Thread.State: RUNNABLE
        at java.lang.Long.valueOf(Long.java:557)
        at com.alibaba.china.biz.viewcache.tree.NestTree.getNode(NestTree.java:188)
        at com.alibaba.china.biz.viewcache.ViewCacheTool.retrieveDisplayCategory(ViewCacheTool.java:802)
        at com.alibaba.apps.saleoffer.module.control.spuIndustry.SpuIndustryOfferResultMro.getIndustryMroAttributes(SpuIndustryOffer
ResultMro.java:113)

 

 

才访问了几次这个代码对应的url,就出现该请求对应的处理线程一直在runnable状态,而且应用的url显示超时了。

 

好吧,再查下代码

 

while (true) {
            DisplayCategory offerCategory = viewCacheTool.retrieveDisplayCategory(curCategoryId);
            if (offerCategory != null && offerCategory.getAttributes() != null && offerCategory.getAttributes().size() > 0) {
                for (int i = 0; i < offerCategory.getAttributes().size(); i++) {
  ...}
curCategoryId = offerCategory.getSuperCategoryId1();}
......}
 

 

这段代码再执行过程中由于 viewCacheTool.retrieveDisplayCategory的生产环境和测试环境的数据源不同导致在测试环境没有出现问题,而线上处理过程由于curCategoryId = offerCategory.getSuperCategoryId1();在递归过程中

由于没有进入if程序块,导致死循环。

 

第一次遇到cpu和load飙升这么高,很有可能还真是死循环引起的,跟线程一直在执行有关。

2
0
分享到:
评论
5 楼 zhwj184 2012-09-23  
那是超级计算机,一般人哪用得起,只是cpu使用率达到95%以上,响应超慢,线程池用完之后就都等着连接超时
4 楼 szxd 2012-09-22  
coding1688 写道
楼主的机器运行速度不够快。传说:世界上最快的超级计算机上,死循环只要6秒就执行完了

在怀疑是不是?
3 楼 finallygo 2012-07-03  
coding1688 写道
楼主的机器运行速度不够快。传说:世界上最快的超级计算机上,死循环只要6秒就执行完了

应该是抛stackoverflow异常了吧
2 楼 andyhan 2012-07-03  
coding1688 写道
楼主的机器运行速度不够快。传说:世界上最快的超级计算机上,死循环只要6秒就执行完了

那还是死循环吗?
1 楼 coding1688 2012-07-03  
楼主的机器运行速度不够快。传说:世界上最快的超级计算机上,死循环只要6秒就执行完了

相关推荐

    Java线上故障排查方案.pdf

    Java线上故障排查是一项复杂而关键的任务,需要系统地收集和分析信息,以便快速定位并解决问题。文档中提到的各个知识点将帮助我们深入了解如何在Java环境中有效进行线上故障排查。 首先,文档提到了几种常见的排查...

    Java线上故障排查方案(2).pdf

    在处理Java线上故障时,工程师需要具备一系列的技能来快速定位并解决生产环境中的问题。本文档围绕Java线上故障排查提供了详尽的方案和知识点,覆盖了从问题定位到解决方案的多个方面。 首先,了解Java线上常见问题...

    java线上故障分析-线程dump,堆内存分析

    本文将深入探讨Java线上故障分析的关键技术之一——线程dump与堆内存分析,帮助开发者快速定位并解决问题。 #### 线程dump解析 **线程dump**是一种用于捕捉程序运行时刻所有线程状态的快照,它能够提供关于线程的...

    btrace java线上debug神器

    **BTrace:Java线上调试利器** BTrace是Java开发者在生产环境中进行问题排查的一个强大工具。它无需修改或重新部署代码,就能实时地对运行中的Java应用程序进行动态追踪,帮助我们收集必要的信息,如方法调用、性能...

    JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC 一条龙!.docx

    JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC 一条龙! 本文档将详细介绍 Java 线上...本文档提供了一个完整的 Java 线上故障排查套路,涵盖了 CPU、磁盘、内存、网络和 GC 等多个方面的故障排查方法。

    线上故障定位分析全套方案

    总的来说,线上故障定位分析是一个系统性、综合性的过程,需要对各个层面有深入的理解,并结合适当的工具进行诊断。通过上述步骤,我们可以逐步缩小问题范围,最终确定并解决故障,确保系统的正常运行。在实际操作中...

    Alibaba Java Diagnostic Tool ArthasAlibaba Java诊断利器Arthas.zip

    通过Arthas,开发者无需重启服务,就能实时查看和分析应用状态,极大地提升了问题排查效率。 ### 主要功能 1. **命令行工具集**:Arthas提供了一系列命令行工具,如`asm`用于查看类的信息,`sc`用于查看运行时的类...

    Arthas - Java 诊断利器.docx

    Arthas,全名 Alibaba Arthas,是一个强大的开源Java诊断工具,由阿里巴巴开发并维护。这个工具的主要目的是帮助...通过熟练掌握Arthas,开发者可以在面对复杂问题时更加从容,及时解决线上故障,保障服务的高可用性。

    唯品会java分析工具vjtop

    VJTop是一款由唯品会开发的高效、易用的Java分析工具,专门用于实时监控和诊断Java应用程序的运行状态。它提供了丰富的功能,帮助开发者快速定位和解决性能问题,确保系统的稳定运行。 ### 主要功能 1. **实时堆栈...

    诊断工具arthas.zip

    《Arthas:Java线上诊断的强大工具》 在软件开发过程中,我们经常遇到需要实时查看和分析应用程序运行状态的情况,而无需重启服务。在这种场景下,Arthas工具显得尤为重要。"诊断工具arthas.zip"就是一个专为Java...

    Java诊断工具.zip

    走进科学带您了解 Greys,Java 线上问题诊断工具。关联文档关于软件程序安装入门说明常见问题更新記事編輯英文-README程序安装远程安装curl -sLk http://ompc.oss.aliyuncs.com/greys/install.sh|sh远程安装(短...

    20201210技术分享--java动态追踪技术浅析.pptx

    BTrace 的设计目标是提供一种简单、安全的方式来监控和诊断 Java 应用程序,而无需修改源代码或者重启服务。 BTrace 的工作原理: 1. **安装探针(Probes)**:BTrace 脚本是由 Java 语法编写,包含了需要执行的...

    java 程序员 开发 转正答辩 ppt

    - **线上问题排查困难**:加强基础知识学习,提高故障诊断能力。 - **环境资源有限**:与其他团队共享资源,优化环境配置。 ### 五、总结 通过上述分析可以看出,作为Java程序员,在准备转正答辩的过程中,不仅要...

    arthas-packaging-3.4.5-bin.zip

    Arthas是一款强大的Java线上问题诊断工具,尤其在复杂生产环境中,它能帮助开发者快速定位和解决问题。Arthas的3.4.5版本的压缩包"arthas-packaging-3.4.5-bin.zip"包含了多种核心组件和辅助脚本,便于用户使用。 ...

    医院信息管理系统(JAVA+SQL Server)

    5. 诊疗记录:记录每一次患者就诊的过程,包括诊断结果、治疗方案、处方等,便于医生参考历史记录,进行连续治疗。 6. 财务管理:处理医院的收入和支出,包括患者的费用结算、医保报销等,确保财务的准确性。 7. ...

    开源阿里JVM诊断工具最新版arthas-packaging-3.6.6

    阿里开源的JVM诊断工具Arthas是一款强大的Java运行时诊断和分析工具,其最新版本为`arthas-packaging-3.6.6`。这款工具旨在帮助开发者在不重启应用的情况下,解决线上问题,进行性能优化,以及深入理解应用程序的...

    Arthas-boot.zip

    Arthas,全称为 Alibaba Arthas,是阿里巴巴开源的一款强大的Java诊断工具,它可以帮助开发者在不重启服务的情况下进行各种操作,如查看类、方法、线程、堆内存、GC状态等,极大地提高了开发和调试的效率。...

    以线上实例来看,内存泄漏的图文解决方案.docx

    本文将以一个具体的线上实例为背景,介绍如何逐步排查并解决内存泄漏问题。通过图文并茂的方式,帮助读者更好地理解内存泄漏的诊断方法。 #### 二、问题背景 在一个项目中,开发团队新上线了一个API接口,并选择了...

    arthas,追踪堆栈,监控服务,拆箱即用

    Arthas是一款由Alibaba开源的Java诊断工具,它可以帮助开发者在不修改代码的情况下,对线上环境的问题进行快速定位和解决。"追踪堆栈"、"监控服务"以及"拆箱即用"是Arthas的核心功能特性。 一、追踪堆栈 追踪堆栈是...

Global site tag (gtag.js) - Google Analytics