Spring-Batch导致内存泄漏

时间:2015-03-18 11:15:13

标签: java spring memory-leaks spring-batch

我们有一个弹簧批处理作业,负责将测试场景从平面文件加载到DB,运行我们想要测试的程序,验证其结果。

我们检查程序执行的许多场景(~300),因此我们加载精确场景,启动程序并验证其结果~300次。

这项工作实施如下:

<job id="jobXY" xmlns="http://www.springframework.org/schema/batch">
    <step id="loadFlatFileToDb" next="loadTestScenario">
        <tasklet>
            <chunk reader="flatFileReader" writer="flatFileWriter" commit-interval="2500"/>
        </tasklet>
    </step>

    <step id="loadTestScenario" next="launchProgram">
        <tasklet ref="loadTestScenario"/>
    </step>

    <step id="launchProgram" next="verifyResults">
        <tasklet ref="launchProgramTasklet"/>
    </step>

    <step id="verifyResults" next="endTest">
        <tasklet ref="verifieAvisTasklet"/>
    </step>

    <decision id="endTest" decider="endTestDecider">
        <next on="FALSE" to="loadTestScenario" />
        <end on="TRUE"/>
    </decision>
</job>

我们将最后4个步骤循环300次。这些步骤在内存消耗方面确实很亮。此外,测试的程序在另一个JVM中启动。所以它不应该在内存方面影响这个程序。

但是,该程序占用的内存会随着时间的推移而增加。大约150次执行后,使用的内存(开始时间:~100mo)大5倍,增加到5g!

通过连接Yourkit分析器,我能够检测到存储在上下文中的StepExecution使用了大量内存(并且每次循环后都会增加)。

如何在每个步骤后禁用保存StepExecution的功能?我不需要它,因为我的工作不可重启。

如果您有任何其他想法可以解决我的问题,我也很感兴趣。

非常感谢你的帮助。

0 个答案:

没有答案