JDBC连接数满了,请教如何查找问题根源?

tobey_cheng 2015-05-13 06:02:18
我在linux服务器上使用tomcat部署了一个web应用程序,最近经常出现网站无法访问情况,查看日志发现无法获取数据库连接:
2015-05-13 15:09:40,668 - ERROR - Exception occurred during processing request: null
java.lang.NullPointerException
at com.data.dao.Database.getConnection(Database.java:57)

请教下各位,如何去查找到底是哪些连接没有得到释放?难道只能一个个代码去看吗?
另外,在服务器上是否有工具或命令查看当前应用数据库连接数是多少?或者能在服务器产生日志查看哪些代码执行没有
释放连接?

我现在连接池设置的最大连接是15个,我想接下来先把这个数增加到100个。但我想这个不是解决问题的根本:
<!-- 连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize">15</property>

我在网上找了大量资料,实在找不到解决方法,所以来这里求教,公司只有我一个搞开发的,真是伤不起!
...全文
3150 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
睡不醒的加菲 2015-05-21
  • 打赏
  • 举报
回复
以前遇到过一个情况,dao里面出现异常没有close掉
  • 打赏
  • 举报
回复
你在进行数据库读写是怎么操作的?
baidu_27405919 2015-05-16
  • 打赏
  • 举报
回复
DAOImpl里每个方法最后写上DButil.close(conn);
qingdunzhuti 2015-05-15
  • 打赏
  • 举报
回复
检查一下你访问数据库的方法,是不是用完后没有没有关闭连接。
浮云若水 2015-05-14
  • 打赏
  • 举报
回复
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					${hibernate.dialect}
				</prop>
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
				<!-- 可以自动创建数据库表(create),不创建(none) -->
				<!--<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>  -->
				<!-- 开启二级缓存 -->
				<prop key="hibernate.cache.use_second_level_cache">true</prop>
				<!-- 关掉查询时的二级缓存 -->  
				<prop key="hibernate.cache.use_query_cache">false</prop>
				<!-- 缓存类 -->
				<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
			   <prop key="hibernate.connection.release_mode">after_statement</prop>
			</props>
		</property>
		<!-- 包扫描的方式加载注解类(推荐) -->
		<property name="packagesToScan">
			<list>
				<value>${packagesToScan}</value>
			</list>
		</property>
	</bean>
浮云若水 2015-05-14
  • 打赏
  • 举报
回复
	
		<!-- 数据库配置 -->
	<bean id="dataSource"
		class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass">
		<value>oracle.jdbc.driver.OracleDriver</value>
		</property>
		<property name="jdbcUrl">
           <value>${url}</value>
		</property>
		<property name="user"><value>${username}</value></property>
		<property name="password"><value>${password}</value></property>
		<!-- 初始化链接数 -->
		<property name="initialPoolSize" ><value>10</value></property>
		<!-- 连接池可分配最大连接数 -->
		<property name="maxPoolSize" ><value>100</value></property>
		<!-- 连接池可分配最小连接数 -->
		<property name="minPoolSize" ><value>10</value></property>
        <!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --> 
        <property name="maxIdleTime" value="1800" /> 
        <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 --> 
        <property name="acquireIncrement" value="3" /> 
        <property name="maxStatements" value="1000" /> 
        <!--每60秒检查所有连接池中的空闲连接。Default: 0 --> 
        <property name="idleConnectionTestPeriod" value="60" /> 
        <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 --> 
        <property name="acquireRetryAttempts" value="30" /> 
        <property name="breakAfterAcquireFailure" value="true" /> 
        <property name="testConnectionOnCheckout" value="false" /> 
	</bean>
scmod 2015-05-13
  • 打赏
  • 举报
回复
一般都是用现成的数据库连接池 自己这样写的话要么就是客户端退出自己调用close或者自己写类似超过最大空闲时间断开的任务 或者数据库好像有的自己就能设定最大空闲连接时间超时也能断开连接 tomcat那个是tomcat的服务器连接数不是jdbc的吧?
Defonds 2015-05-13
  • 打赏
  • 举报
回复
c3p0 提供了检测跟踪用完而不释放连接池连接的配置。 加上 unreturnedConnectionTimeout 和 debugUnreturnedConnectionStackTraces 然后检查你的日志,很容易找到过了超时时间还没有将连接及时返回连接池的代码,估计这部分代码要么是没有关掉连接,要么是出了异常,异常处理里没有关掉连接。把没有关闭的连接关掉即可。 官方参考资料: http://www.mchange.com/projects/c3p0/#configuring_to_debug_and_workaround_broken_clients
伍六七AI编程 2015-05-13
  • 打赏
  • 举报
回复
sorry ,是Context.xml 打错了
伍六七AI编程 2015-05-13
  • 打赏
  • 举报
回复
当访问量大的时候,可以试试使用数据连接池连接,在tomcat中server.xml中配置以下参数,应该可以解决这个问题。 maxActive:设置数据库连接池中活动状态连接的最大数目,为0则不受限制; maxIdle:设置数据库连接池中空闲状态连接的最大数目,为0则不受限制; maxWait:设置数据库连接池中空闲状态连接的最长等待时间,超时则抛出异常,为-1则可无限等待;
xf_zhanghaidong 2015-05-13
  • 打赏
  • 举报
回复

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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