admin管理员组文章数量:1648600
在运行一个java应用时,发现出现如下错误。
org.logicalcobwebs.proxool.HouseKeeper sweep
警告: #0002 was active for 634297 milliseconds and has been removed automaticaly. The Thread responsible was named 'http-8080-1', but the last SQL it performed is unknown because the trace property is not enabled.
相应出错代码:
[java] view plain copy
- try {
- conn = connect();
- stmt = conn.createStatement();
- rs = stmt.executeQuery(sql);
- while (rs.next()) { //报错地方
- to = rs.getString("EmailTo").trim();
- body = rs.getString("EmailBody");
- subject = rs.getString("EmailSubject");
- from = rs.getString("EmailFrom").trim();
- cc = rs.getString("EmailCC").trim();
- send(subject, body, to, cc, bcc, from, au))
- }
- } catch (SQLException e) {
- ErrorLog.log("get send message exception./n" + e.getMessage(),logfile);
- //throw e;
- } finally {
- close(rs, stmt, conn);
- }
分析:
根据提示,程序中的数据库连接没有释放。由此想到可能在执行sql前有connection没有释放。检查,程序中获取并使用connection的地方并不多,检查后发现没有问题。同时也没有出现一个connection过多的进行获取getConnect()。
继续关注输出信息,发现rs.next()行出错,但并不是每行都出错。而是在循环到第7条左右时才发生异常。难道是连接超时了?检查配置文件,连接超时时间是5秒,和循环7次用时基本相当。将超时时间设大,出错的发生的时间依次推迟了。设置为足够循环完成的时间。异常消失。
原因:
connection为及时关闭。不过这是一个表面的原因。深层次的原因是
proxool中配置的maximum-active-time不仅对于空闲的connection生效,而且对于处于活动的connection同样生效。这样可能将活动中的connection强制关闭。
解决:
该类问题需要从这几个方面检查:
1, 是否有connection在使用完后未及时关闭。
2, 对于一个connection是否多次的进行了getConnection()操作。
3, 检查报错地方的connection的生存期其执行时间和proxool配置文件中的maximum-active-time值的差异。适当增大该值。如果一个connection的操作过程中耗费时间较长,可以通过临时变量来缩短connection的操作时间。如上例,可以定义string数组来存放,而后在用循环来处理这些string。
http://blog.csdn/xiciliu/article/details/5905113
本文标签: 错误orgproxoollogicalcobwebssweep
版权声明:本文标题:Proxool错误:org.logicalcobwebs.proxool.HouseKeeper sweep 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1729494180a1202747.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论