如果解决Cannot get a connection, pool error Timeout waiting for idle object

hlf 2012-02-28 11:56:32
我在servlet的Context.xml中创建了一个Resource,格式如下:
<Resource name="jdbc/Test" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
username="zs" password="123456" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/Test?autoReconnect=true&zeroDateTimeBehavior=convertToNull" />

然后在程序中这样使用:
DataSource ds = (DataSource)envCtx.lookup("jdbc/Test");
Connection conn = ds.getConnection();

出现如下错误:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:114)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at com.easeware.productlist.GetProductList.doPost(GetProductList.java:118)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:774)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:896)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Unknown Source)
Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
at org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1134)
at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
... 19 more

重启MYSQL后就没问题,但过一会后又出现了,求解
...全文
11892 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
EvangelineIT 2014-10-24
  • 打赏
  • 举报
回复
请问楼主解决了吗 我也遇到这样问题
bingbao 2012-09-28
  • 打赏
  • 举报
回复
try{
............
............
}catch(Exception e){
out.print(e.getMessage());
}finally{
try{
rs.close();
}catch(Exception e){
}
try{
stmt.close();
}catch(Exception e){
}
try{
con.close();
}catch(Exception e){
}
}
CfsAjaxSpring 2012-03-18
  • 打赏
  • 举报
回复
解决办法是,把你的代码中的connection.close!我也是这样
hlf 2012-02-29
  • 打赏
  • 举报
回复
还有,我show variables like '%timeout';
发现wait_timeout=2147483
interactive_timeout = 31536000;

可我明明是运行了下面的设置呀
set wait_timeout= 57,350,142;
set interactive_timeout = 57,350,142

不知道什么原因
WWWWA 2012-02-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hlf 的回复:]

还是一样报错哦

还有其他办法吗?
[/Quote]
show variables like '%timeout';

你是怎样做的
hlf 2012-02-29
  • 打赏
  • 举报
回复
还是一样报错哦

还有其他办法吗?
ACMAIN_CHM 2012-02-28
  • 打赏
  • 举报
回复
在MYSQL服务器中检查一下MYSQL的错误日志,看看有没有什么信息以供分析。
hlf 2012-02-28
  • 打赏
  • 举报
回复
好,试试看

现在wait_timeout和interactive_timeout 都是28800
iihero_ 2012-02-28
  • 打赏
  • 举报
回复
7楼的正解。
hlf 2012-02-28
  • 打赏
  • 举报
回复
从日志里没看出什么问题
wwwwb 2012-02-28
  • 打赏
  • 举报
回复
show variables like '%timeout';
set wait_timeout= 57,350,142;
set interactive_timeout = 57,350,142

试试
ACMAIN_CHM 2012-02-28
  • 打赏
  • 举报
回复
[Quote]我在MySQL Server文件夹下没找到有后缀是log的文件,MYSQL的错误日志文件是哪个呢?[/Quote] datadir 对应文件夹下有个 err 为扩展名的。
hlf 2012-02-28
  • 打赏
  • 举报
回复
有关闭的
manbuzhiwu 2012-02-28
  • 打赏
  • 举报
回复
因为你程序里面的connection 没有关闭,每次运行都是重启一个connection 知道把资源耗光。
解决办法是,把你的代码中的connection.close!
hlf 2012-02-28
  • 打赏
  • 举报
回复
我在MySQL Server文件夹下没找到有后缀是log的文件,MYSQL的错误日志文件是哪个呢?不好意思,我是菜鸟


应该不是防火墙,MYSQL刚重启的时候是可以访问的,过了一、两后就不行了。对了,这个servlet是给一个ipad应用使用的,该IPAD应用一运行就会访问一次

我想是不是因为访问人数太多导致?我刚把maxActive="100"调成了500,另外把MYSQL的max_connections=2000,还有tomcat的maxThreads="2000",正在看效果


或者你们还有别的建议吗?
wwwwb 2012-02-28
  • 打赏
  • 举报
回复
有防火墙?日志中有无内容

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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