Веб-приложение [alloFactorV3] зарегистрировало драйвер JDBC [com.mysql.jdbc.Driver], но не удалось отменить его регистрацию при остановке веб-приложения.Чтобы предотвратить утечку памяти, драйвер JDBC был принудительно незарегистрирован.
Кажется, что веб-приложение [alloFactorV3] запустило поток с именем [Поток очистки заброшенного соединения], но не смогло его остановить.Это очень вероятно, чтобы создать утечку памяти.Трассировка стека потока: java.lang.Object.wait(Native Method)
Я регулярно сталкиваюсь с проблемами утечки памяти. Это часто происходит, так как мы обновили (security ypdate) сервер ubuntu (я не уверен, что какие-либо файлы, связанные с tomcat8, изменены, напримерserver.xml
)
Я закрыл незамкнутые InputStreams / OutputStreams, так как я узнал, что они вызывают утечку памяти.Я думаю, что эта проблема может иметь отношение к JDBCDriver.Я новичок, поэтому, пожалуйста, любезно посоветуйте.
Если ручная регистрация регистрирует утечку памяти, как я могу реализовать ее в проекте пружин сопоставления на основе xml?
Приведенный ниже код является моей конфигурацией для соединения jdbc
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass">
<value>${jdbc.driverClassName}</value>
</property>
<property name="jdbcUrl">
<value>${jdbc.url}</value>
</property>
<property name="user">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
<property name="idleConnectionTestPeriod"><value>22000</value></property>
<property name="preferredTestQuery"><value>SELECT 1</value></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="mappingJarLocations" value="/WEB-INF/lib/alloFactor_V3.jar">
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.query.factory_class">${hibernate.query_factory_class}</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.current_session_context_class">${hibernate.current_session_context_class}</prop>
</props>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="baseTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="store*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="generate*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>