Spring Integration中的内存泄漏

时间:2015-10-07 00:15:32

标签: spring spring-integration

我有一个在Spring Integration中构建的应用程序,它有很多Store过程调用(使用int-jdbc:stored-proc-outbound-gateway)和Prepared-statement调用(使用int-jdbc:outbound-gateway)。

我遇到堆大小问题几次。我没有增加堆大小,而是使用堆转储并尝试使用Eclipse中的内存分析插件来分析它们。该报告向我展示了两次可能的泄漏,

  

加载的“oracle.jdbc.driver.T4CCallableStatement”的382个实例   “org.jboss.modules.ModuleClassLoader @ 0xb0bee3c8”占据225,949,088   (50.00%)字节。这些实例是从一个实例引用的   “java.lang.Object []”,由“”关键字加载   oracle.jdbc.driver.T4CCallableStatement java.lang.Object []

     

org.jboss.modules.ModuleClassLoader @ 0xb0bee3c8

     

295个“oracle.jdbc.driver.T4CPreparedStatement”实例,由   “org.jboss.modules.ModuleClassLoader @ 0xb0bee3c8”占据49,342,360   (10.92%)字节。这些实例是从一个实例引用的   “java.lang.Object []”,由“”关键字加载   java.lang.Object [] oracle.jdbc.driver.T4CPreparedStatement

     

org.jboss.modules.ModuleClassLoader @ 0xb0bee3c8

任何人都可以帮助我吗?什么可能导致这些问题? int-jdbc:outbound-gateway的配置是

<int-jdbc:outbound-gateway id="test1"
    data-source="dataSource" request-channel="testchannel1"
    reply-channel="testchannel2" query="select * from EMP"
    row-mapper="testMapper" max-rows-per-poll="0"
    requires-reply="false">
    <int-jdbc:request-handler-advice-chain>
        <bean class="com..service.NullReplyAdvice" />
    </int-jdbc:request-handler-advice-chain>
</int-jdbc:outbound-gateway>

int-jdbc的配置:outbound-gateway

            

        <int-jdbc:sql-parameter-definition
            name="P_LIST" direction="OUT" type="#{T(oracle.jdbc.OracleTypes).ARRAY}"
            type-name="T_LIST" return-type="sqlReturnArray" />
        <int-jdbc:sql-parameter-definition
            name="RESPONSE_CODE" direction="OUT" type="VARCHAR" />
        <int-jdbc:sql-parameter-definition
            name="RESPONSE_DESC" direction="OUT" type="VARCHAR" />
        <int-jdbc:parameter name="USER_NUMIN" expression="payload.userId" />
        <int-jdbc:parameter name="STORE_NUMIN" expression="payload.storeId" />
        <int-jdbc:parameter name="ZONE_NUMIN" expression="payload.zoneId" />
        <int-jdbc:parameter name="SLOT_NUMIN" expression="payload.slotTodelete" />
        <int-jdbc:parameter name="RANGE_COUNTIN" value="0" />
        <int-jdbc:parameter name="APP_PARAMIN" value="DELETE" />
        <int-jdbc:request-handler-advice-chain>
            <bean class="com.test.HttpRequestInterceptor"></bean>
        </int-jdbc:request-handler-advice-chain>
    </int-jdbc:stored-proc-outbound-gateway>

1 个答案:

答案 0 :(得分:1)

如果使用spring jdbc / hibernate实现dao层,则可能不会出现此问题。 完成执行后,确保准备好的语句正确关闭。