系统挂起,怀疑线程阻塞和数据源问题,线上等着急

问题描述

每次卡死的时候,均发现只接受报文请求,不抛出任何异常,但不在往下执行。下面将系统挂起是的core文件,和正常运行的core文件放到附件中。请各位有经验的人,帮忙分析下,先谢谢了。有需要更多资料的可直接加我qq:286728500 问题补充:283433775 写道

解决方案

大部分线程都开在一下这个地方了at com/froad/platform/database/connection/DBConnection.getConnection(DBConnection.java:89(Compiled Code))从启动命令:java -Dfile.encoding=gbk -Xms512m -Xmx1024m -jar mobileBank.jar start看你用的是自己开发的jar。根据以往经验,您可以从记下几个方面查找原因:1.看看你的代码中jbdc连接连接池设置;2.再出现类似情况是查看数据库端连接数和是否存在锁;3.IBM的jdk也支持Jconsole监控的如果可以的话开启JMX监控,便于你发现问题4.出现类似情况是操作系统的资源使用情况是什么样的?5.数据库允许最大连接数是否设置的够用?
解决方案二:
看了一下core1. 肯定不是来一个request就创建一个thread,因为使用threadpool2. Global GC来频繁了基本上2~4分钟就需要一次GC,我遇到过一次这样的情况,是因为新生代eden区不小,但是Survivor很小,导致很对比较大的对象直接放在old space,导致old Sapce的频繁Full GC
解决方案三:
可能是数据库连接池死锁。http://gdpglc.iteye.com/blog/782549
解决方案四:
看看是否数据库锁表,导致连接池用完....
解决方案五:
那么多的wait for getconnection连接池数量配得太少?或者有连接没有及时释放?
解决方案六:
在系统出问题的时候, 隔一分钟左右打印一下jstack,看看线程详细信息。如果cpu高的话,也有可能是存在死锁或死循环。
解决方案七:
引用现在这个系统10w用户还没到,同一套系统再别的地方已经超过100w了还是没问题。从core文件上看是死锁导致应用挂掉了。 两边系统的配置一样吗?内存、系统最大句柄数、数据库配置等等。。
解决方案八:
总之,顺着数据库连接的线索往下找,肯定能找到原因的。比较乐观的情况是增加连接池的最大连接数,充其量数据库也调调连接数就能搞定;或者发现死锁(个人感觉可能性不大),对症下药即可。如果调整连接数不能解决问题、也没有发现死锁,可以同时监控一下数据库,看是否有执行时间太长的sql,然后做进一步的代码和数据库优化;或者查线程安全问题,可能导致连接未释放。上面这些工作,该找dba的找dba!
解决方案九:
1、检查一下数据库的设置,连接数是否太小,需要的话可增大2、同时调整一下数据库连接池的最大数3、运行时,定时监控数据库那边的连接数4、运行时,定时监控数据库那边是否有死锁,以及死锁的sql信息
解决方案十:
线程安全,还有一个问题的存在。查看一下你的sql执行时间。用explain看看。肯定的是,你的连接池里面的连接已经用完了。
解决方案十一:
那么,你只能修改连接数据库那部分的代码,估计是卡在那里,所以所有的线程类似阻塞
解决方案十二:
刚才看了一下文件,发现两个问题第一个:创建线程太多。正常的,才10W多线程。不正常的,是80W多。估计是业务量增加了。第二个:连接数据库,也有问题。修改这两点之后,在看看。关于第一点,不建议每个业务都要创建一个线程。
解决方案十三:
哦,87个里,还有少量这样的:Waiting for Monitor Lock on com/froad/mbank/froadqz/smsResp$Lock@AD1CE750/AD1CE75Cat com/froad/mbank/froadqz/smsResp.Resp(smsResp.java:236(Compiled Code)) at com/froad/platform/base/SocketResp.run(SocketResp.java:57(Compiled Code))
解决方案十四:
数据库连接池满了吧,或者数据库连接满了。javacore里有87个线程Blocked,都在等待数据库连接:Waiting for Monitor Lock on com/froad/platform/database/connectionpool/ConnectionPool@904433E8/904433F4at com/froad/platform/database/connection/DBConnection.getConnection(DBConnection.java:89(Compiled Code))。。。。。看看是调整连接池还是调整数据库,或者有代码未释放连接。
解决方案十五:
引用Full thread dump J9 VM (J2RE 5.0 IBM J9 2.3 AIX ppc-32 build 20081126_26240_bHdSMr, native threads):路过看了下,既然是卡死,是否是你启动的线程太多导致呢,我只是看看而已。

时间: 2024-10-06 16:22:19

系统挂起,怀疑线程阻塞和数据源问题,线上等着急的相关文章

多线程之Java线程阻塞与唤醒

线程的阻塞和唤醒在多线程并发过程中是一个关键点,当线程数量达到很大的数量级时,并发可能带来很多隐蔽的问题.如何正确暂停一个线程,暂停后又如何在一个要求的时间点恢复,这些都需要仔细考虑的细节.在Java发展史上曾经使用suspend().resume()方法对于线程进行阻塞唤醒,但随之出现很多问题,比较典型的还是死锁问题.如下代码,主要的逻辑代码是主线程启动线程mt一段时间后尝试使用suspend()让线程挂起,最后使用resume()恢复线程.但现实并不如愿,执行到suspend()时将一直卡住

异步与线程阻塞

应该这样理解它 异步,早期开发人员对它有很多误解,认为不阻塞主线程就是异步,更有认为不阻塞UI就是异步,但异步归根结底和这两个东西关系并不大,异步的出现主要是为了提高线程的利用率,让可用线程更高,而不是一个线程只做一件事,这件事没有完成就不去做下面的事情,这是不正确的,线程应该被解放出来!事实上,你如果学过nodejs的话,对单线程非阻塞应该更清楚一些,它主要通过方法回调来实现异步的,只是在语法上和C#不太一样. 说一下上面提到的误解 误解1:不阻塞主线程 如果不阻塞主线程的话,你只能开个新线程

jQuery同步Ajax带来的UI线程阻塞问题及解决办法

遇到了同步Ajax引起的UI线程阻塞问题,在此记录一下. 事情起因是这样的,因为页面上有多个相似的异步请求动作,本着提高代码可重用性的原则,我封装了一个名为getData的函数,它接收不同参数,只负责获取数据,然后把数据return.基本的逻辑剥离出来是这样的: function getData1(){         var result;         $.ajax({             url : "p.php",             async : false,  

Win7无法开机显示“profile服务未能登录,无法在系统中创建更多线程”如何解决?

  Win7无法开机显示"profile服务未能登录,无法在系统中创建更多线程"如何解决?Win7发展到至今已经相对完善了,但是偶尔还会有一些问题困扰着用户,不少用户遇到了系统无法正常启动的情况,而且只提示"profile服务未能登录,无法在系统中创建更多线程",要怎么解决这个情况,下面就让小编来告诉你. profile服务未能登录 解决方案: 1.重新启动计算机开机时连续点击F8,选择进入安全模式. 2.开始-在搜索栏中输入services.msc /s ; 运行

Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口(四)

前言: 在前面的系列中,我们虽然完成了其大部分功能,但是,离正真运行,还是有一大段距离 当你F5运行时,在弹出对话框之后,如果你不即时点确定,或者上个WC回来之后,你会发现已经提示出错了 这节开始,我们将对其进行一小步一小步的优化,来避免一些明显容易引发的错误.   感知一下最原始的消息弹出框如下图:     一:传统消息框,容易引发命案   1:原始的消息框,是线程阻塞类型的,很容易引发超时问题 线程阻塞?怎么理解? 简单的说就是,WCF服务端给客户端发送了消息提示之后,一直进入等待状态,直到

求助:VC使用ODBC连接数据库,线程阻塞

问题描述 VC使用ODBC连接oracle数据库,因数据库连接中断,导致线程执行数据库操作时线程阻塞,不会抛出异常,怎么处理啊 解决方案 解决方案二:实际操作时,连接中断后,会抛出异常.解决方案三:因数据库连接中断.其实链接中断了.你无法进行后续操作的.你判断一下.链接中断就返回算了.写个日志.

reactor线程阻塞引起故障

大致线程模型: jstack打印JVM堆栈,可以看到reactor线程阻塞了,导致它对应的前端连接无法使用.阻塞在了oracle驱动rollback动作,这里其实是因为oracle驱动为了保证串行请求响应而在底层加了锁,而这个通道被慢语句塞住了,所以reactor线程都塞了. "$_NIOREACTOR-7-RW" prio=10 tid=0x00007f069856f000 nid=0xde1 waiting for monitor entry [0x00007f0677011000

java-生产环境线程阻塞dump

问题描述 生产环境线程阻塞dump 各位大神,帮忙分析一下异常dump,生产环境用户量增多的时候就会出现线程阻塞,导致服务器性能变慢,测试环境做压力测试没有重现,让DBA看了一下DB也没有发现异常会话.高频sql或者是性能较差的sql.数据等待等 DUMP如下: "[STUCK] ExecuteThread: '40' for queue: 'weblogic.kernel.Default (self-tuning)'" id=54 idx=0xf0 tid=160959 prio=1

windows api 多线程-子线程阻塞来调用定时器确保定时函数完成

问题描述 子线程阻塞来调用定时器确保定时函数完成 小弟是在初始化一个窗口的时候创建了一个子线程,在这个子线程里面调用对了一个定时器来定时检测一些信息,然后将检测的结果返回给该线程处理,然后将处理结果在主线程里面和用户交互,现在是发现定时器的那个定时执行的函数不工作,在设置定时器下面用一个MessageBox阻塞一下,定时执行的函数就工作,但是其他组的线程的办法貌似不行,求指点,部分代码如下 unsigned int _stdcall Thread1(LPVOID) { HANDLE g_hEve