maxwait time is too long. 

解决方案 »

  1.   

    原先设定的maxwait的值是-1,在出现了上述情况后才改为25200000的
    我们的设想是应该大于8小时,也即大于mysql的等待时间。
    有没有原理性的分析?
      

  2.   

    你看看mysql的连接是否都满了?mysql缺省的连接数是100,你可以用show processlist察看你的当前连接是多少???
      

  3.   

    即使mysql的连接满了,他也不过是让后面的连结请求排队等候,现在的问题是
    过了一晚tomcat就不能连接上mysql,非得重启tomcat,似乎并非mysql的连接限制
    问题,小强有解释嘛?
      

  4.   

    你重启tomcat实际上就是释放了其占有的连接数!这样就可以了!
    mysql连接满了之后,后面的请求得不到处理,你的连接池配置看看是不是有问题?还有你使用完连接后,是否都及时关闭放回了连接池内?
      

  5.   

    你的tomcat应该是4.1以上版本的,我现在公司使用的是4.0.6版的,在连接池配置上和你的不一样!我出现过你的情况,但是配置完4.0.6自带的连接池之后就没有问题了,在mysql中察看连接数时一般都是固定的几个!!!!
      

  6.   

    我的web程序里瞬间数据库连接可能会有很多。
    还有你可以看到我的连接池配置里面有这样一个参数
      <parameter>
       <name>removeAbandoned</name>
       <value>true</value>
      </parameter>
    它的作用就是丢弃已经超时的连接
    至于mysql数据库的连接池,不是我做的,但是开发师告诉我,他做了处理。
    不用的连接到了时限就会被丢弃!
      

  7.   

    你能告诉我你的tomcat版本吗?
    你的意思丢弃是什么??是放回连接池内,还是作为无用对象来由jvm回收??
    你的超时连接的时限是多少?
    mysql连结池maxwait时间设为8小时,也就是说你的超时实现是8小时了??连接池一般情况下不需要自己写,你使用的tomcat就很好的实现了连接池的管理!
    能把一些你的关于连接池的代码贴上来吗?
    比如,如何取得连接,关闭连接等等?
      

  8.   

    TO:小强,我用的也是4.0.6+MySQL3.22
    是否可以把你的连接池程序给我看看,还有为什么在4.0.6下写的代码移植到4.1.18后,不能正常运行?并且有的页面显示乱码,有的从数据库中取出到就是乱码?像这样的移植问题一般怎么解决呢?
      

  9.   

    4.1.18,丢弃就是做标志,不再占用资源,等待垃圾收集,
    我考虑的tomcat的设置大于8小时就行,至于mysql的连接池代码,是别人写的,
    他不在,我也拿不到。他说过使用了连接复用,不是释放连接,而是给其他的连接使用
      

  10.   

    等待垃圾收集,你是不是用了finalize方法,在其中释放资源呢?jvm的垃圾回收具有不确定性,有些是等间隔的,有些是到了你的内存不够才收集!!!你用的连接池不是tomcat自带的呀???
    那这种情况下你配置tomcat的server.xml有什么意义呢?
    我看你的server.xml的配置应该是用的tomcat自带的连接池呀??
    哎,不清楚你的连接池的运行机制,所以也不好说!!
      

  11.   

    当然是使用的tomcat自身的连接池,但是mysql自己会维护数据库的连接池,两者不是一回事呀
      

  12.   

    首先从程序方面入手,一是优化你的sql语句,尽量少进行连接。你可以再仔细考虑程序流程,看一看有没有可能一次查询来满足。后来我将自己的程序修改了之后,情况有一些好转。看你的回答,先做到这一步的可能性比较大;二呢再仔细的检查一遍你的程序,确定是不是重用没有的连接,我觉得你有可能是新建了连接,而他的连接池程序又没有释放的功能。要不,你可以反编译他的程序,加上回收的功能。不然的话呢,总会要重启才能回收,这可能才是治本的方法吧。
    从数据库方面呢,按照需要建立索引,把你经常访问的表的Table type Preference改成trasaction-safe,同时表的Table type将自动改成InnoDB,这样mysql就支持行锁定,而不是表锁定了。然后在my.cnf文件里面将你的mysql调到最优,你可以看一看mysql中文参考手册。希望能对你有些帮助,不过总觉得修改数据库也不能最终解决你的问题,还是应该把连接池那个程序认真看一看,然后再看看你自己在使用时,是重新启用闲置的连接,还是新建了一个连接。原来的连接是不是释放了,是不是做了标志。
      

  13.   

    我重新咨询了dba,我的web程序只是使用了自己的连接池配置,与mysql无关,
    mysql用的是默认配置,那么这种必须重启才能连接上数据库的问题究竟是什么原因导致的呢?
      

  14.   

    找到一个解决办法,还要等一天才有结果:)
    在url设定的时候加上autoReconnect=true,
    mysql默认的关闭空闲连接时间是八小时,
    在此之后,tomcat的连接池将重新尝试连接!
    如下
    <parameter>
      <name>url</name> 
      <value>jdbc:mysql://localhost/mywebappDB?autoReconnect=true</value> 
      </parameter>
     <parameter>
    值得注意的是,这里的localhost在实际部署的时候可能要改为固定IP,否则不能运行!
    这个结论我还在尝试中,应该没错。
    谢谢各位,结贴拿分!