出现了个很奇怪的问题

老汉学编程 2010-11-19

tomcat刚启动的时候,运行良好,可是运行一段时间后就会出问题:所有不与数据库交互的的action能顺畅访问,与数据库交互的action都会卡在那里一直不动。但在我自己测试环境这个问题不好重现。猜测应该是访问数据库时受阻。不知道具体原因。后台有时警告:
2010-11-18 15:07:01 org.hibernate.util.JDBCExceptionReporter logExceptions
警告: SQL Error: 17002, SQLState: null
2010-11-18 15:07:01 org.hibernate.util.JDBCExceptionReporter logExceptions
严重: Io 异常: Connection reset

还有

2010-11-18 15:07:01 org.hibernate.util.JDBCExceptionReporter logExceptions
警告: SQL Error: 0, SQLState: null
2010-11-18 15:07:01 org.hibernate.util.JDBCExceptionReporter logExceptions
严重: Already closed.
2010-11-18 15:07:01 org.hibernate.util.JDBCExceptionReporter logExceptions
警告: SQL Error: 0, SQLState: null
2010-11-18 15:07:01 org.hibernate.util.JDBCExceptionReporter logExceptions
严重: Already closed.

后面还有这个:

 

2010-11-19 4:22:42 org.apache.coyote.ajp.AjpMessage processHeader
严重: Invalid message recieved with signature 18245
2010-11-19 4:25:05 org.apache.coyote.ajp.AjpMessage processHeader
严重: Invalid message recieved with signature 18501
2010-11-19 4:26:46 org.apache.coyote.ajp.AjpMessage processHeader
严重: Invalid message recieved with signature 62923

(这个应该是我们经理在做Apache+tomcat测试时弄的错,不知道会不会影响系统)

我想应该是我们配置的问题,导致数连接池会话没有释放:

<bean id="dateSource"
  class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  <property name="url"
   value="jdbc:mysql://localhost/deidian?useUnicode=true&amp;characterEncoding=UTF-8" />
  <property name="username" value="***" />
  <property name="password" value="***" />
 </bean>

 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dateSource" />
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     org.hibernate.dialect.MySQL5InnoDBDialect
    </prop>
    <prop key="hibernate.show_sql">false</prop>
    <prop key="hibernate.format_sql">true</prop>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
   </props>
  </property>
  <property name="mappingResources">
   <list>
    <value>xxx/User.hbm.xml</value>
     ......
   </list>
  </property>

(是不是我们的配置太随意了些,我觉得很多东西都没注意到)

老汉学编程 2010-11-19
真是生气啊,有人hibernateTemplate.getSessionFactory.getSession爽之后不管了!
guofengcn 2010-11-25
dateSource貌似没有配置destroy-method="close"哦!
ywlqi 2010-11-25
一般链接池是自动管理链接是否释放的,只要不是在代码中用完链接又没放回池里面一般不会是链接没释放的问题。这种情况现在比较少见了,因为框架都给你做完了。
我猜想是mysql数据库的8小时问题
kidd3166 2010-11-25
mysql数据库 空闲的话 重新连接几次就会连接上的
chensong215 2010-12-07
有可能是网络的问题吗,网络不稳定也会有这个问题
老汉学编程 2010-12-09
这个问题已经解决了,就是有人用过session而没有关闭,导致连接池session都被占用:系统启动后相关没释放session的功能模块被使用一定的次数后,连接池满,导致所有与数据库交互的模块都不再可用!
java小书童 2011-04-20
rentianchou 2011-04-27
chensong215 写道
有可能是网络的问题吗,网络不稳定也会有这个问题


用spring的话不用手动close掉session
rentianchou 2011-04-27
老汉学编程 写道
这个问题已经解决了,就是有人用过session而没有关闭,导致连接池session都被占用:系统启动后相关没释放session的功能模块被使用一定的次数后,连接池满,导致所有与数据库交互的模块都不再可用!

用spring的话不用手动close掉session
Global site tag (gtag.js) - Google Analytics