[原创]Weblogic Server挂起问题探究_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4321 | 回复: 0   主题: [原创]Weblogic Server挂起问题探究        下一篇 
jixiang.lu
注册用户
等级:中尉
经验:474
发帖:34
精华:0
注册:2014-3-17
状态:离线
发送短消息息给jixiang.lu 加好友    发送短消息息给jixiang.lu 发消息
发表于: IP:您无权察看 2014-3-27 17:57:36 | [全部帖] [楼主帖] 楼主

1.服务挂起时间段内server日志错误:

com.teradata.jdbc.jdbc_4.util.JDBCException: [Teradata JDBC Driver] [TeraJDBC 12.00.00.110] [Error 1000] [SQLState 08S01] Login failure for Packet receive Wed Jul 13 16:20:48 CST 2011 socket local=0.0.0.0/0.0.0.0:30624 remote=10.3.10.44/10.3.10.44:1025 cid=ffc111d sess=0 java.io.IOException: Incomplete LAN message header: read 0 bytesat com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF.read(TDNetworkIOIF.java:370)at com.teradata.jdbc.jdbc_4.io.TDPacketStream.readStream(TDPacketStream.java:818)at com.teradata.jdbc.jdbc.GenericInitDBConfigState.action(GenericInitDBConfigState.java:80)at com.teradata.jdbc.jdbc.GenericLogonController.run(GenericLogonController.java:49)at com.teradata.jdbc.jdbc_4.TDSession.<init>(TDSession.java:195)at com.teradata.jdbc.jdbc_3.ifjdbc_4.TeraLocalConnection.<init>(TeraLocalConnection.java:94)at com.teradata.jdbc.jdbc.ConnectionFactory.createConnection(ConnectionFactory.java:55)at com.teradata.jdbc.TeraDriver.doConnect(TeraDriver.java:216)at com.teradata.jdbc.TeraDriver.connect(TeraDriver.java:149)at weblogic.jdbc.common.internal.ConnectionEnvFactory.makeConnection(ConnectionEnvFactory.java:301)at weblogic.jdbc.common.internal.ConnectionEnvFactory.createResource(ConnectionEnvFactory.java:205)at weblogic.common.resourcepool.ResourcePoolImpl.makeResources(ResourcePoolImpl.java:1049)at weblogic.common.resourcepool.ResourcePoolImpl.makeResources(ResourcePoolImpl.java:977)at weblogic.common.resourcepool.ResourcePoolImpl.reserveResourceInternal(ResourcePoolImpl.java:318)at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:295)at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:285)at weblogic.jdbc.common.internal.ConnectionPool.reserve(ConnectionPool.java:352)at weblogic.jdbc.common.internal.ConnectionPool.reserve(ConnectionPool.java:346)at weblogic.jdbc.common.internal.MultiPool.searchLoadBalance(MultiPool.java:333)at weblogic.jdbc.common.internal.MultiPool.findPool(MultiPool.java:186)at weblogic.jdbc.common.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:77)at weblogic.jdbc.common.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:96)at weblogic.jdbc.pool.Driver.connect(Driver.java:129)at weblogic.jdbc.jts.Driver.getNonTxConnection(Driver.java:647)at weblogic.jdbc.jts.Driver.connect(Driver.java:137)at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:359)at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:462)at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:528)at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:561)at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:579)at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:589)at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:609)at org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:674)at com.teamsun.framework.dao.hibernate.JdbcSupport.executeByNamedQuery(JdbcSupport.java:276)at gov.chinapost.ems.track.ttq.service.pojo.QcgzBaseQueryService.getRouteInfo(QcgzBaseQueryService.java:2404)at gov.chinapost.ems.track.ttq.service.webservice.QcgzBaseQueryService.getRouteInfo(QcgzBaseQueryService.java:29)at jrockit.reflect.CompiledMethodInvoker.invoke0(Ljava.lang.Object;[Ljava.lang.Object;)Ljava
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:609)
at org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:674)
at com.teamsun.framework.dao.hibernate.JdbcSupport.executeByNamedQuery(JdbcSupport.java:276)
at gov.chinapost.ems.track.ttq.service.pojo.QcgzBaseQueryService.getRouteInfo(QcgzBaseQueryService.java:2404)
at gov.chinapost.ems.track.ttq.service.webservice.QcgzBaseQueryService.getRouteInfo(QcgzBaseQueryService.java:29)
at jrockit.reflect.CompiledMethodInvoker.invoke0(Ljava.lang.Object;[Ljava.lang.Object;)Ljava.lang.Object;(Unknown Source)
at jrockit.reflect.CompiledMethodInvoker.invoke(Ljava.lang.Object;[Ljava.lang.Object;)Ljava.lang.Object;(Unknown Source)
at java.lang.reflect.Method.invoke(Ljava.lang.Object;[Ljava.lang.Object;I)Ljava.lang.Object;(Unknown Source)
at weblogic.webservice.component.javaclass.JavaClassInvocationHandler.invoke(JavaClassInvocationHandler.java:142)
at weblogic.webservice.core.handler.InvokeHandler.handleRequest(InvokeHandler.java:105)
at weblogic.webservice.core.HandlerChainImpl.handleRequest(HandlerChainImpl.java:144)
at weblogic.webservice.core.DefaultOperation.process(DefaultOperation.java:551)
>


2.Teradata官方解释为

Those error messages typically indicate that the Teradata JDBC Driver has lost its connection to the Teradata Database.
Common causes of connectivity problems, in order from most likely to less likely:
- Session was forcibly logged off by Teradata Manager, PMON, or some other kind of script that checks for inactivity
- Teradata Database restart
- Transient network failure
- Faulty network hardware


同时在服务器不能做出正确响应时,做了8thread dump可以看出大量线程阻塞,主要的阻塞点有:

Blocked trying to get lock: weblogic/jdbc/common/internal/ConnectionPool@0x11d17b08
Blocked trying to get lock: java/lang/Object@0x8733120[fat lock]


而拿着锁的线程都在执行下面操作:

at weblogic/jdbc/pool/Driver.connect(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;(Driver.java:129)[optimized]
at weblogic/jdbc/jts/Driver.getNonTxConnection(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;(Driver.java:647)[optimized]
at weblogic/jdbc/jts/Driver.connect(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;(Driver.java:137)[optimized]
at weblogic/jdbc/common/internal/RmiDataSource.getConnection()Ljava/sql/Connection;(RmiDataSource.java:359)[optimized]
com/teradata/jdbc/jdbc/ConnectionFactory.createConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/teradata/jdbc/URLParameters;)Ljava/sql/Connection;(ConnectionFactory.java:55)
at com/teradata/jdbc/TeraDriver.doConnect(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;(TeraDriver.java:216)
at com/teradata/jdbc/TeraDriver.connect(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;(TeraDriver.java:149)


3.深入分析

首先,根据teradata报出的错误和官方解释,注意查看网络环境和session设置问题以查找什么原因导致teradata数据连接失败。

其次,根据线程快照可以看出线程阻塞发生在创建数据库连接,由于server挂起有时间周期性,可在下午3点到4点故障发生前观察数据库连接池内连接数变化情况。由于连接池初始值设置不大,当业务高峰期到来时,新增用户请求陡增,当前数据库连接数不能满足请求,而创建物理连接又是很耗时的,所以会导致大量线程在等锁的情况发生。建议通过观察适当调整数据库连接池初始值。同时,观察数据库连接数的最大值是否已达到峰值或者超过峰值出现overload,如果以达到数据库连接池设置不是很合理,要适当调大连接池峰值和初始值。

最后,还要观察是否有数据库连接泄露发生。方法已告知管理员王林。如有任何疑问烦请及时与我联系。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论