今天项目发布,在预发布机器上居然出现应用启动不到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飙升这么高,很有可能还真是死循环引起的,跟线程一直在执行有关。
分享到:
相关推荐
Java线上故障排查是一项复杂而关键的任务,需要系统地收集和分析信息,以便快速定位并解决问题。文档中提到的各个知识点将帮助我们深入了解如何在Java环境中有效进行线上故障排查。 首先,文档提到了几种常见的排查...
在处理Java线上故障时,工程师需要具备一系列的技能来快速定位并解决生产环境中的问题。本文档围绕Java线上故障排查提供了详尽的方案和知识点,覆盖了从问题定位到解决方案的多个方面。 首先,了解Java线上常见问题...
本文将深入探讨Java线上故障分析的关键技术之一——线程dump与堆内存分析,帮助开发者快速定位并解决问题。 #### 线程dump解析 **线程dump**是一种用于捕捉程序运行时刻所有线程状态的快照,它能够提供关于线程的...
**BTrace:Java线上调试利器** BTrace是Java开发者在生产环境中进行问题排查的一个强大工具。它无需修改或重新部署代码,就能实时地对运行中的Java应用程序进行动态追踪,帮助我们收集必要的信息,如方法调用、性能...
JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC 一条龙! 本文档将详细介绍 Java 线上...本文档提供了一个完整的 Java 线上故障排查套路,涵盖了 CPU、磁盘、内存、网络和 GC 等多个方面的故障排查方法。
总的来说,线上故障定位分析是一个系统性、综合性的过程,需要对各个层面有深入的理解,并结合适当的工具进行诊断。通过上述步骤,我们可以逐步缩小问题范围,最终确定并解决故障,确保系统的正常运行。在实际操作中...
通过Arthas,开发者无需重启服务,就能实时查看和分析应用状态,极大地提升了问题排查效率。 ### 主要功能 1. **命令行工具集**:Arthas提供了一系列命令行工具,如`asm`用于查看类的信息,`sc`用于查看运行时的类...
Arthas,全名 Alibaba Arthas,是一个强大的开源Java诊断工具,由阿里巴巴开发并维护。这个工具的主要目的是帮助...通过熟练掌握Arthas,开发者可以在面对复杂问题时更加从容,及时解决线上故障,保障服务的高可用性。
VJTop是一款由唯品会开发的高效、易用的Java分析工具,专门用于实时监控和诊断Java应用程序的运行状态。它提供了丰富的功能,帮助开发者快速定位和解决性能问题,确保系统的稳定运行。 ### 主要功能 1. **实时堆栈...
《Arthas:Java线上诊断的强大工具》 在软件开发过程中,我们经常遇到需要实时查看和分析应用程序运行状态的情况,而无需重启服务。在这种场景下,Arthas工具显得尤为重要。"诊断工具arthas.zip"就是一个专为Java...
走进科学带您了解 Greys,Java 线上问题诊断工具。关联文档关于软件程序安装入门说明常见问题更新記事編輯英文-README程序安装远程安装curl -sLk http://ompc.oss.aliyuncs.com/greys/install.sh|sh远程安装(短...
BTrace 的设计目标是提供一种简单、安全的方式来监控和诊断 Java 应用程序,而无需修改源代码或者重启服务。 BTrace 的工作原理: 1. **安装探针(Probes)**:BTrace 脚本是由 Java 语法编写,包含了需要执行的...
- **线上问题排查困难**:加强基础知识学习,提高故障诊断能力。 - **环境资源有限**:与其他团队共享资源,优化环境配置。 ### 五、总结 通过上述分析可以看出,作为Java程序员,在准备转正答辩的过程中,不仅要...
Arthas是一款强大的Java线上问题诊断工具,尤其在复杂生产环境中,它能帮助开发者快速定位和解决问题。Arthas的3.4.5版本的压缩包"arthas-packaging-3.4.5-bin.zip"包含了多种核心组件和辅助脚本,便于用户使用。 ...
5. 诊疗记录:记录每一次患者就诊的过程,包括诊断结果、治疗方案、处方等,便于医生参考历史记录,进行连续治疗。 6. 财务管理:处理医院的收入和支出,包括患者的费用结算、医保报销等,确保财务的准确性。 7. ...
阿里开源的JVM诊断工具Arthas是一款强大的Java运行时诊断和分析工具,其最新版本为`arthas-packaging-3.6.6`。这款工具旨在帮助开发者在不重启应用的情况下,解决线上问题,进行性能优化,以及深入理解应用程序的...
Arthas,全称为 Alibaba Arthas,是阿里巴巴开源的一款强大的Java诊断工具,它可以帮助开发者在不重启服务的情况下进行各种操作,如查看类、方法、线程、堆内存、GC状态等,极大地提高了开发和调试的效率。...
本文将以一个具体的线上实例为背景,介绍如何逐步排查并解决内存泄漏问题。通过图文并茂的方式,帮助读者更好地理解内存泄漏的诊断方法。 #### 二、问题背景 在一个项目中,开发团队新上线了一个API接口,并选择了...
Arthas是一款由Alibaba开源的Java诊断工具,它可以帮助开发者在不修改代码的情况下,对线上环境的问题进行快速定位和解决。"追踪堆栈"、"监控服务"以及"拆箱即用"是Arthas的核心功能特性。 一、追踪堆栈 追踪堆栈是...