dbcp的问题,不知道下面的各个属性代表什么,其中设定有什么问题,(访问的人多了,就会断掉)

charlie0895 2004-07-27 04:00:34
<data-sources>
<data-source key="mydatabase" type="org.apache.commons.dbcp.BasicDataSource">
<set-property property="autoCommit" value="false"/>
<set-property property="description" value="Example Data Source Configuration"/>
<set-property property="driverClassName" value="com.mysql.jdbc.Driver"/>
<set-property property="removeAbandoned" value="true"/>
<set-property property="removeAbandonedTimeout" value="60"/>
<set-property property="maxWait" value="10000"/>
<set-property property="maxCount" value="10"/>
<set-property property="maxIdle" value="3"/>
<set-property property="url" value="jdbc:mysql://192.168.10.208/dtvserver10?autoReconnect=true"/>
<set-property property="username" value="dtvserver"/>
<set-property property="password" value="dtvserver"/>
<!-- EIS-SZ
<set-property property="url" value="jdbc:mysql://192.168.10.247/@database-username@10"/>
<set-property property="user" value="root"/>
<set-property property="password" value="@database-username@"/>
-->
</data-source>
</data-sources>
...全文
117 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
trampwind 2004-07-28
  • 打赏
  • 举报
回复
应该是你的连接没关闭,最后导致连接池耗尽,后面的请求无法执行了,你的getUserDAO类里就没关闭conn,每定义一个conn在使用完后都要关闭,不然它就一直占用着一个连接。检查下你的页面及JAVA程序中看有没没有关闭的,修改后重启服务(),我配的是TOMCAT的连接池,里面最大连接数是maxActive。你可以到开发语言板块的jsp,javabean...里面咨询下,那里熟悉这个的比较多的。
charlie0895 2004-07-28
  • 打赏
  • 举报
回复
我已经把maxcount改到100了,maxidle改到10了,都不行,还是在3个后就死了!而且目前使用该东西几乎就那么两三台机子
trampwind 2004-07-28
  • 打赏
  • 举报
回复
应该跟maxIdle没关系吧,这些连接不够用的话会建立新的连接,主要是maxCount,你设的是多少,够不够用,改大下试试
charlie0895 2004-07-28
  • 打赏
  • 举报
回复
我提交的服务3个的时候还很好,但是第四个还有问题,所以我以为是maxIdle的问题,所以我把它的值加到4,然后我也不服务重新启动了,但是到第四个服务的时候,还是不行,其中jboss报错如下:
FATAL[XNetworkDAO] SQL EXCEPTION: org apache.commons.dbcp. SQLNestdException Cannot get a connection . pool exhausted ,cause: Timeout waiting for idle object.
charlie0895 2004-07-28
  • 打赏
  • 举报
回复
谢谢了
trampwind 2004-07-28
  • 打赏
  • 举报
回复
改这个参数等于把一些废弃连接变成可用连接的时间缩短了,一般默认值300的。所有程序中在某个连接使用完后,如果都不忘了把它关闭的话,我想这样的问题也就应该解决了。
charlie0895 2004-07-28
  • 打赏
  • 举报
回复
问题解决了,我把
<set-property property="removeAbandonedTimeout" value="60"/>改成
<set-property property="removeAbandonedTimeout" value="25"/>
就可以了,但我不是很明白是为什么呢!感觉程序里面还可能有问题(因为心里没底)
trampwind 2004-07-27
  • 打赏
  • 举报
回复
maxCount是应用程序连接数据库的最大数目,连接数超出的话有些请求可能就无法完成了,不指访问的网页数量,用户发出的请求如果要对数据库做操作的话才会占用一个数据库连接。
charlie0895 2004-07-27
  • 打赏
  • 举报
回复
另外我想问一下,就是,那个maxCount是连接的计算机数量,还是访问的网页数量,比如我一台机子,打开多个,是占起中的一个呢,还是多个
trampwind 2004-07-27
  • 打赏
  • 举报
回复
maxIdle是最大的空闲连接数,是一些与数据库的连接始终是保持着的,当你的应用程序要访问数据库的时候就可以优先使用这些连接,以提高速度,如果这些连接数不够的话才会重新建立一些连接。maxCount和maxIdle都是根据实际的情况来设置的,主要就是同时在线的访问量了。log文件没用它看过,你的程序中如果每次conn建立使用后,最后都有conn.close();就应该没问题了。
charlie0895 2004-07-27
  • 打赏
  • 举报
回复
private UserDAO getUserDAO(HttpServletRequest request) throws Exception
{
DataSource ds = getDataSource(request, Constants.DATABASE_KEY);

if (ds!=null) {
Connection conn = ds.getConnection();
if (conn!=null) {
UserDAO userDAO = new UserDAO(conn);
return userDAO;
}
}
return null;
}
private void setupUserList(HttpServletRequest request) throws Exception {
HttpSession session = request.getSession();
DataSource ds = getDataSource(request, Constants.DATABASE_KEY);

if (ds==null) {
log.info("Could not find DataSource");
}
else {
Connection conn = ds.getConnection();
if (conn!=null) {
ArrayList userList;
UserDAO userInfo = new UserDAO(conn);
String menuRight =(String)session.getAttribute("menu140");
int menu_140_dom = Integer.parseInt(menuRight);
if(menu_140_dom == 4 || menu_140_dom == 6){
userList = userInfo.loadUserList();
log.info("UserList size=" + userList.size());
}
else /*if(menu_140_dom == 0)*/{
AuthToken userinfo = (AuthToken)session.getAttribute(Constants.AUTH_KEY);
int myselfid= userinfo.getId();
userList = userInfo.loadUserList(myselfid);
log.info("UserList size=" + userList.size());

}

if (userList!=null)
session.setAttribute(Constants.USERLIST_KEY, userList);
conn.close();
}
}
}
charlie0895 2004-07-27
  • 打赏
  • 举报
回复
另外我想说明一下,该服务的访问量不大。
能不能从log文件中看出是否访问后没有关闭连接呢。
charlie0895 2004-07-27
  • 打赏
  • 举报
回复
想问问maxIdle是什么意思呢
trampwind 2004-07-27
  • 打赏
  • 举报
回复
注意你的程序中在某次数据库访问结束后,一定要关闭连接,节约资源,maxIdle也可以改大些,改成10个或20个,不用每次访问数据库都要重新建立连接。
trampwind 2004-07-27
  • 打赏
  • 举报
回复
<set-property property="maxCount" value="10"/>
应该是最多能建立的连接数目,访问两大的话10个应该不够的,设成50或100试试.

56,687

社区成员

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

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