一次线上多线程程序问题排查

问题描述:

周一发现线上的一个程序从上周日一直运行“卡住”了十多个小时,本来是10MIN一次更新数据的,导致现在数据一直停留在过去,并且由于程序一直“卡住”不报错,使得我们收不到报警短信通知。

问题分析与定位:

根据报错日志来看,是一个类A的static区域发生了异常,由于在static区域并没有catch住这个异常,导致类A无法加载成功,JAVA异常打印如下:

java.lang.NoClassDefFoundError: Could not initialize class

可是,为什么程序会“卡住”呢?

接下来,分析了下,程序的运行结构,发现:

程序会开启N个线程去并发请求数据,然后利用JOIN的方式,合并线程,待所有线程都请求完后,再去执行其他步骤。在线程任务类中的run方法利用到了那个类A!更加重要的是,在对类A方法调用也没有任何异常的处理!

也就是说这N个线程运行run方法,就会抛出异常,线程就会终结!

线程已经死掉了,可是JOIN还在等待着线程进行合并,一直等待着他们活过来!

这就是程序为什么一直卡住的根本原因!

可见,我们在对待线程的异常处理上,应该小心,如果我们不处理,那么这个线程可能死掉,我们还不知道!那么处理线程异常的方式有哪些呢?

线程内解决:

线程是一段独立的代码,有问题,应该让它自己来CATCH住处理,即应该注意在run方法中处理异常。

线程外解决:

Thread方法提供了一个方法:setUncaughtExceptionHandler

可以通过这个方法来实现线程代码之外处理未捕获异常!

时间: 2024-10-01 04:44:29

一次线上多线程程序问题排查的相关文章

线上FullGC频繁的排查

线上FullGC频繁的排查 问题 前段时间发现线上的一个dubbo服务Full GC比较频繁,大约每两天就会执行一次Full GC. Full GC的原因 我们知道Full GC的触发条件大致情况有以下几种情况: 程序执行了System.gc() //建议jvm执行fullgc,并不一定会执行 执行了jmap -histo:live pid命令 //这个会立即触发fullgc 在执行minor gc的时候进行的一系列检查 执行Minor GC的时候,JVM会检查老年代中最大连续可用空间是否大于了

线上性能问题初步排查方法

文章出处http://ifeve.com/find-bug-online/ 有时候有很多问题只有在线上或者预发环境才能发现,而线上又不能Debug,所以线上问题定位就只能看日志,系统状态和Dump线程,本文只是简单的介绍一些常用的工具,帮助定位线上问题. 问题定位 1: 首先使用TOP命令查看每个进程的情况,显示如下: top - 22:27:25 up 463 days, 12:46, 1 user, load average: 11.80, 12.19, 11.79 Tasks: 113 t

关于GC(上):Apache的POI组件导致线上频繁FullGC问题排查及处理全过程

某线上应用在进行查询结果导出Excel时,大概率出现持续的FullGC.解决这个问题时,记录了一下整个的流程,也可以作为一般性的FullGC问题排查指导. 1. 生成dump文件 为了定位FullGC的原因,首先需要获取heap dump文件,看下发生FullGC时堆内存的分配情况,定位可能出现问题的地方. 1. 1 通过JVM参数自动生成 可以在JVM参数中设置-XX:+ HeapDumpBeforeFullGC参数. 建议动态增加这个参数,直接在线上镜像中增加一方面是要重新打包发布,另一方面

线上缓存不一致问题排查

缓存不一致问题 背景 会员相关有: 综合系统 :会员的基础CRUD ,旧系统,慢慢废弃,不再维护. 会员系统 :从综合系统里拆分出来的,有基础服务,接口服务,数据同步服务,SSO服务等. 每个服务都是单独的应用. 两个系统共用同一张表,只是维护的字段不一样. email[邮箱]是我们新版本中新支持的功能.综合系统没有 email 字段,会员系统里有 email 字段. 第一次反馈 用户反馈说: 邮箱收不邮件,去设置中看,邮箱设置会自动消失.重新设置一下就好了. 定位问题 一) 排查数据问题 怀疑

ArcEngine 开发点批量移动到线上小程序

算法的思路是按照下面的帖子中来的 :http://www.cnblogs.com/gisoracle/archive/2013/04/09/3009285.html 查找相关资料是因为在做供水管网的时候,发现很多CAD转到ArcGIS中的数据,有很多管件与管线有一定的偏差.这个程序的功能就是批量的将管件点移动到管线上. 界面设计: 用到了winform和devexpress的控件库. 代码如下: 1 using ESRI.ArcGIS.Carto; 2 using ESRI.ArcGIS.Geo

线上Java程序导致服务器CPU占用率过高的问题排除过程

博文转至:http://www.jianshu.com/p/3667157d63bb,博文更好效果看原版,转本博文的目的就算是个书签吧,需要时候可以定位原文学习 1.故障现象 客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高. 2.CPU占用过高问题定位 2.1.定位问题进程 使用top命令查看资源占用情况,发现pid为14063的进程占用了大量的CPU资源,CPU占用率高达776.1%,内存占用率也达到了29.8% [[

记一次线上Java程序导致服务器CPU占用率过高的问题排除过程

https://blog.csdn.net/u013991521/article/details/52781423 1.故障现象 客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高. 2.CPU占用过高问题定位 2.1.定位问题进程 使用top命令查看资源占用情况,发现pid为14063的进程占用了大量的CPU资源,CPU占用率高达776.1%,内存占用率也达到了29.8% [ylp@ylp-web-01 ~]$ top t

线上问题排查

线上操作与线上问题排查实战 技术同学需要经常登录线上的服务器进行操作,58到家架构部/运维部/58速运技术部,联合进行了一次线上操作与线上问题排查实战演练,同学们反馈有收获,特将实战演练的问题和答案公布出来,希望对大家也有帮助. 一.了解机器连接数情况 问题:1.2.3.4的sshd的监听端口是22,如何统计1.2.3.4的sshd服务各种连接状态(TIME_WAIT/ CLOSE_WAIT/ ESTABLISHED)的连接数. 参考答案: netstat -n | grep 1.2.3.4:2

线上服务CPU100%问题快速定位实战--转

来自微信公众号 架构师之路 功能问题,通过日志,单步调试相对比较好定位. 性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底. 58到家架构部,运维部,58速运技术部联合进行了一次线上服务CPU问题排查实战演练,同学们反馈有收获,特将实战演练的试题和答案公布出来,希望对大家也有帮助. 题目 某服务器上部署了若干tomcat实例,即若干垂直切分的Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警. 问:如何定位是哪个服务进程导致CPU