首先从程序方面入手,一是优化你的sql语句,尽量少进行连接。你可以再仔细考虑程序流程,看一看有没有可能一次查询来满足。后来我将自己的程序修改了之后,情况有一些好转。看你的回答,先做到这一步的可能性比较大;二呢再仔细的检查一遍你的程序,确定是不是重用没有的连接,我觉得你有可能是新建了连接,而他的连接池程序又没有释放的功能。要不,你可以反编译他的程序,加上回收的功能。不然的话呢,总会要重启才能回收,这可能才是治本的方法吧。 从数据库方面呢,按照需要建立索引,把你经常访问的表的Table type Preference改成trasaction-safe,同时表的Table type将自动改成InnoDB,这样mysql就支持行锁定,而不是表锁定了。然后在my.cnf文件里面将你的mysql调到最优,你可以看一看mysql中文参考手册。希望能对你有些帮助,不过总觉得修改数据库也不能最终解决你的问题,还是应该把连接池那个程序认真看一看,然后再看看你自己在使用时,是重新启用闲置的连接,还是新建了一个连接。原来的连接是不是释放了,是不是做了标志。
我们的设想是应该大于8小时,也即大于mysql的等待时间。
有没有原理性的分析?
过了一晚tomcat就不能连接上mysql,非得重启tomcat,似乎并非mysql的连接限制
问题,小强有解释嘛?
mysql连接满了之后,后面的请求得不到处理,你的连接池配置看看是不是有问题?还有你使用完连接后,是否都及时关闭放回了连接池内?
还有你可以看到我的连接池配置里面有这样一个参数
<parameter>
<name>removeAbandoned</name>
<value>true</value>
</parameter>
它的作用就是丢弃已经超时的连接
至于mysql数据库的连接池,不是我做的,但是开发师告诉我,他做了处理。
不用的连接到了时限就会被丢弃!
你的意思丢弃是什么??是放回连接池内,还是作为无用对象来由jvm回收??
你的超时连接的时限是多少?
mysql连结池maxwait时间设为8小时,也就是说你的超时实现是8小时了??连接池一般情况下不需要自己写,你使用的tomcat就很好的实现了连接池的管理!
能把一些你的关于连接池的代码贴上来吗?
比如,如何取得连接,关闭连接等等?
是否可以把你的连接池程序给我看看,还有为什么在4.0.6下写的代码移植到4.1.18后,不能正常运行?并且有的页面显示乱码,有的从数据库中取出到就是乱码?像这样的移植问题一般怎么解决呢?
我考虑的tomcat的设置大于8小时就行,至于mysql的连接池代码,是别人写的,
他不在,我也拿不到。他说过使用了连接复用,不是释放连接,而是给其他的连接使用
那这种情况下你配置tomcat的server.xml有什么意义呢?
我看你的server.xml的配置应该是用的tomcat自带的连接池呀??
哎,不清楚你的连接池的运行机制,所以也不好说!!
从数据库方面呢,按照需要建立索引,把你经常访问的表的Table type Preference改成trasaction-safe,同时表的Table type将自动改成InnoDB,这样mysql就支持行锁定,而不是表锁定了。然后在my.cnf文件里面将你的mysql调到最优,你可以看一看mysql中文参考手册。希望能对你有些帮助,不过总觉得修改数据库也不能最终解决你的问题,还是应该把连接池那个程序认真看一看,然后再看看你自己在使用时,是重新启用闲置的连接,还是新建了一个连接。原来的连接是不是释放了,是不是做了标志。
mysql用的是默认配置,那么这种必须重启才能连接上数据库的问题究竟是什么原因导致的呢?
在url设定的时候加上autoReconnect=true,
mysql默认的关闭空闲连接时间是八小时,
在此之后,tomcat的连接池将重新尝试连接!
如下
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost/mywebappDB?autoReconnect=true</value>
</parameter>
<parameter>
值得注意的是,这里的localhost在实际部署的时候可能要改为固定IP,否则不能运行!
这个结论我还在尝试中,应该没错。
谢谢各位,结贴拿分!