问题描述
每次卡死的时候,均发现只接受报文请求,不抛出任何异常,但不在往下执行。下面将系统挂起是的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):路过看了下,既然是卡死,是否是你启动的线程太多导致呢,我只是看看而已。