调用hibernate的query.list()方法时,没响应也没异常

villain001 2014-01-07 03:22:16
条件:java多job多线程不停地循环查询DB的表,使用spring+hibernate,只是查询,DB中没有数据(做测试),jstack结果如下:
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at oracle.net.ns.Packet.receive(Unknown Source)
at oracle.net.ns.DataPacket.receive(Unknown Source)
at oracle.net.ns.NetInputStream.getNextPacket(Unknown Source)
at oracle.net.ns.NetInputStream.read(Unknown Source)
at oracle.net.ns.NetInputStream.read(Unknown Source)
at oracle.net.ns.NetInputStream.read(Unknown Source)
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1099)
at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1070)
at oracle.jdbc.driver.T4C7Ocommoncall.receive(T4C7Ocommoncall.java:106)
at oracle.jdbc.driver.T4CConnection.doCommit(T4CConnection.java:523)
- locked <0x00000006a5bc7ae0> (a oracle.jdbc.driver.T4CConnection)
at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:1128)
- locked <0x00000006a5bc7ae0> (a oracle.jdbc.driver.T4CConnection)
at com.mchange.v2.c3p0.impl.NewProxyConnection.commit(NewProxyConnection.java:803)
- locked <0x00000006b1957960> (a com.mchange.v2.c3p0.impl.NewProxyConnection)
at org.hibernate.transaction.JDBCTransaction.commitAndResetAutoCommit(JDBCTransaction.java:170)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:146)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:656)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:412)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at com.sun.proxy.$Proxy7.queryByHqlWithPage(Unknown Source)
at com.cslc.js.analyse.service.account.TAccountProvider.getBatch(TAccountProvider.java:63)
at sun.reflect.GeneratedMethodAccessor11.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)
at com.sun.proxy.$Proxy8.getBatch(Unknown Source)
at com.cslc.js.analyse.job.DefaultJob.business(DefaultJob.java:109)
at com.cslc.js.analyse.job.DefaultJob.run(DefaultJob.java:194)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)

现象:不固定job不固定时间的随机发生这种问题。

求大腿解释一下,我该怎么办?
...全文
266 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
villain001 2014-01-16
  • 打赏
  • 举报
回复
首先,经过大量资料查询,发现有很多人提出过这个问题,但是对问题的原因和解决方案却没有资料。 大部分人认为是网络原因导致oracle驱动的底层socket超时。 解决方案就是设置oracle.jdbc.ReadTimeout,oracle驱动默认此值为0,也就是不超时,也就有了我上面的问题,设置此值后,驱动会自动断开超时的连接,问题解决。
  • 打赏
  • 举报
回复
select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$session sess where ao.object_id = lo.object_id and lo.session_id = sess.sid; select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID; alter system kill session '<sid>,<serial#>'; 看下是否有死锁。
loveunittesting 2014-01-08
  • 打赏
  • 举报
回复
你所有的job都用的同一个数据源吗?
villain001 2014-01-07
  • 打赏
  • 举报
回复
connection满了不应该不报错吧,而且其他job运行正常。依然可以自由的query...
kevin-go 2014-01-07
  • 打赏
  • 举报
回复
是不是connection满了
villain001 2014-01-07
  • 打赏
  • 举报
回复
不能用单线程,业务比较复杂。这应用程序与oracle不是一个网段,跑几个小时就出这问题,有时候1个小时有时候3个小时,反正不固定。也没有返回结果,也不报异常,就这样停在那了,很奇怪啊!
-阿克蒙德- 2014-01-07
  • 打赏
  • 举报
回复
检查下你的多线程程序先,如果可以用单线程吧,多线程虽然效率高些,但对新手来说不太好驾驭也不好调试
villain001 2014-01-07
  • 打赏
  • 举报
回复
查了一下,oracle也没有死锁

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧