java大量内存泄漏

xiechunmei13 2010-05-19 04:21:17
目前维护一个项目,数据库连接了2个,一个Mysql,一个oracle。

原始的项目是只连接了oracle,由于后面需求增加了,又连接了一个mysql.

oracle的部分用hibernate

mysql的部分用的spring,jdbctemplate

注意红色部分没有用hibernate。

不知道这样配置可以否?

这样的配置会造成项目运行一天左右就会内存溢出。

如果我把红色部分去掉则不会内存溢出。

请问连接同一个数据库可以用2个不同的持久层吗?

以下配置又出现什么样的错误?

请指教!

配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!--<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"-->
<!--"http://www.springframework.org/dtd/spring-beans.dtd">-->

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:DataBase.properties</value>
</list>
</property>
</bean>
<bean id="transactionManager2"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource1" />
</bean>

<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- Transaction template for Managers -->
<bean id="txProxyTemplate" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager" />
<property name="proxyTargetClass">
<value>true</value>
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="relation*">PROPAGATION_REQUIRED</prop>
<prop key="disconnect*">PROPAGATION_REQUIRED</prop>
<prop key="assign*">PROPAGATION_REQUIRED</prop>
<prop key="unassign*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_SUPPORTS,readOnly</prop>
</props>
</property>
</bean>
<bean id="dataSource1"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>${db.driver}</value>
</property>
<property name="url">
<value>${db.url}</value>
</property>
<property name="username">
<value>${db.username}</value>
</property>
<property name="password">
<value>${db.password}</value>
</property>
<property name="initialSize">
<value>${db.pool.initial}</value>
</property>
<property name="maxActive">
<value>${db.pool.max}</value>
</property>
<property name="defaultAutoCommit" value="false" />
</bean>

<bean id="dataSource"
class="org.logicalcobwebs.proxool.ProxoolDataSource">

<property name="driver">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="driverUrl">
<value>
jdbc:oracle:thin:@localhost:1521:DB?useUnicode=true:characterEncoding=UTF-8
</value>

</property>


<property name="user">
<value>USER</value>
</property>
<property name="password">
<value>i123321</value>
</property>
<property name="alias">
<value>ITVDB</value>
</property>
<property name="delegateProperties">
<value>user=USER,password=i123321</value>
</property>

<property name="houseKeepingSleepTime">
<value>90000</value>
</property>
<property name="prototypeCount">
<value>5</value>
</property>
<property name="maximumConnectionCount">
<value>100</value>
</property>
<property name="minimumConnectionCount">
<value>10</value>
</property>
<property name="trace">
<value>true</value>
</property>
<property name="verbose">
<value>true</value>
</property>
</bean>
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>

<bean id="sessionFactory" lazy-init="true"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="mappingResources">
<list>
<value>
com/ffcs/itv/resources/program/Catalog.hbm.xml
</value>

</list>
</property>

<property name="hibernateProperties">
<props>
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.OSCacheProvider
</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.dialect">
org.hibernate.dialect.HSQLDialect
</prop>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
<prop key="hibernate.show_sql">true</prop>

<prop key="hibernate.cglib.use_reflection_optimizer">
true
</prop>
<prop key="hibernate.proxool.xml">proxool.xml</prop>
<prop key="hibernate.proxool.pool_alias">ITVDB</prop>
</props>
</property>
</bean>

<!-- catalogService bean definition -->
<bean id="catalogDao"
class="com.ffcs.itv.program.dao.impl.CatalogDAOImpl"
lazy-init="true">
<property name="jdbcTemplate">
<ref local="jdbcTemplate" />
</property>
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>

<bean id="catalogService" parent="txProxyTemplate"
lazy-init="true">
<property name="target">
<bean
class="com.ffcs.itv.program.service.impl.CatalogServiceImpl">
<property name="catalogDao">
<ref local="catalogDao" />
</property>
</bean>
</property>
</bean>


<!-- ClientUserDaoImpl bean definition -->
<bean id="clientUserDao"
class="com.ffcs.itv.program.dao.impl.ClientUserDaoImpl"
lazy-init="true">
<property name="jdbcTemplate">
<ref local="jdbcTemplate" />
</property>
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>

<bean id="clientUserService" parent="txProxyTemplate"
lazy-init="true">
<property name="target">
<bean
class="com.ffcs.itv.program.service.impl.ClientUserServiceImpl">
<property name="clientUserDao">
<ref local="clientUserDao" />
</property>
</bean>
</property>
</bean>

<!-- ClientUserDaoImpl bean definition -->
<bean id="loginLogDao"
class="com.ffcs.itv.program.dao.impl.LoginLogDAOImpl"
lazy-init="true">
<property name="jdbcTemplate">
<ref local="jdbcTemplate" />
</property>
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- ipconfig -->
<bean id="ipDao"
class="com.ffcs.itv.program.dao.impl.IpConfigDaoImpl">
<property name="jdbcTemplate">
<ref local="jdbcTemplate" />
</property>
</bean>
<bean id="ipService" parent="txProxyTemplate" lazy-init="true">
<property name="target">
<bean
class="com.ffcs.itv.program.service.impl.IpConfigServiceImpl">
<property name="ipDao">
<ref local="ipDao" />
</property>
</bean>
</property>
</bean>
<bean id="loginLogService" parent="txProxyTemplate"
lazy-init="true">
<property name="target">
<bean
class="com.ffcs.itv.program.service.impl.LoginLogServiceImpl">
<property name="dao">
<ref local="loginLogDao" />
</property>
</bean>
</property>
</bean>

<bean id="iptvBaseDao"
class="com.sn.xmitv2010.manage.dao.Impl.ImspContentBaseDaoImpl">
<property name="dataSource">
<ref local="dataSource1" />
</property>
</bean>
<bean id="iptvBaseService" parent="txProxyTemplate"
lazy-init="true">
<property name="target">
<bean
class="com.sn.xmitv2010.manage.service.Impl.ImspContentBaseServiceImpl">
<property name="iptvBaseDao">
<ref local="iptvBaseDao" />
</property>
</bean>
</property>
</bean>
<bean id="accountDao"
class="com.ffcs.itv.program.dao.impl.IptvAccountDaoImpl">
<property name="jdbcTemplate">
<ref local="jdbcTemplate" />
</property>
</bean>

<bean id="accountService" parent="txProxyTemplate"
lazy-init="true">
<property name="target">
<bean
class="com.ffcs.itv.program.service.impl.IptvAccountServiceImpl">
<property name="accountDao">
<ref local="accountDao" />
</property>
</bean>
</property>
</bean>
</beans>
...全文
1184 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiechunmei13 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zzd 的回复:]

不知道你的泄漏问题处理的咋样了,最近也正在跟内存泄漏作斗争,发现一个好工具:jprofiler_windows_6_0_3,查找泄漏点很容易,一般来说不会是因为配置引起内存泄漏,肯定还是某些地方的代码没写好导致的。
[/Quote]

我现在不会有这个问题了。
但是我没改代码。
我把tomcat里面的一些以前的项目,现在已经不用的给清除了。
我怀疑我的那个确实是tomcat内存不够用了。
zzd 2010-06-08
  • 打赏
  • 举报
回复
不知道你的泄漏问题处理的咋样了,最近也正在跟内存泄漏作斗争,发现一个好工具:jprofiler_windows_6_0_3,查找泄漏点很容易,一般来说不会是因为配置引起内存泄漏,肯定还是某些地方的代码没写好导致的。
xiechunmei13 2010-05-27
  • 打赏
  • 举报
回复
我突然间发现,tomcat它的内存512,最大也1024
我突然想到一个问题,
如果在tomcat中放了多个项目,远远超过了这个数值呢?
项目中放了 exe的可执行下载程序导致很大。
会不会有这个可能?导致tomcat负载过重?内存不够用?
xiechunmei13 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yys79 的回复:]

完全没有说到问题点上,内存泄露跟数据库连接没什么直接关系。泄漏还是内存不够用,这个要搞清楚。比如处理一个超长字符串会造成内存溢出,但并不是泄漏。
关于加载多个项目的问题,tomcat本身是个java应用程序,作为程序,系统会限制他的内存大小,不能无限设置内存,但是可以使用集群的方式。
[/Quote]

集群的方式是怎么说呢?
不明白,请前辈赐教。......
loveunittesting 2010-05-27
  • 打赏
  • 举报
回复
完全没有说到问题点上,内存泄露跟数据库连接没什么直接关系。泄漏还是内存不够用,这个要搞清楚。比如处理一个超长字符串会造成内存溢出,但并不是泄漏。
关于加载多个项目的问题,tomcat本身是个java应用程序,作为程序,系统会限制他的内存大小,不能无限设置内存,但是可以使用集群的方式。
xiechunmei13 2010-05-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mochibing 的回复:]

很有可能是dataSource的配置有问题,加上
Java code

<maximum-connection-count>150</maximum-connection-count>
<maximum-active-time>30000</maximum-active-time>


试试
[/Quote]

我也有感觉是dataSource配置出了问题。
meander 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mybeautiful 的回复:]

搞清问题的根源。
内存溢出是因为程序中有没有释放的java对象(Java Web也是一个java程序)。

使用 visualvm等类似性能检测工具查一查。
[/Quote]
up
mochibing 2010-05-20
  • 打赏
  • 举报
回复
很有可能是dataSource的配置有问题,加上

<maximum-connection-count>150</maximum-connection-count>
<maximum-active-time>30000</maximum-active-time>

试试
Mybeautiful 2010-05-20
  • 打赏
  • 举报
回复
搞清问题的根源。
内存溢出是因为程序中有没有释放的java对象(Java Web也是一个java程序)。

使用 visualvm等类似性能检测工具查一查。
xiechunmei13 2010-05-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kaynezhang 的回复:]

这样是可以的

连接同一个数据库也可以用2个不同的持久层,但如果有的持久化层又缓存机制,可能会造成数据不一致。
[/Quote]

并不是操作同一张表啊,应该不会出现那个数据不一致的问题吧?
kaynezhang 2010-05-19
  • 打赏
  • 举报
回复
这样是可以的

连接同一个数据库也可以用2个不同的持久层,但如果有的持久化层又缓存机制,可能会造成数据不一致。
ma_ji_fu 2010-05-19
  • 打赏
  • 举报
回复
没有遇到过,顶你一下

81,095

社区成员

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

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