Spring-Batch 的内存泄漏

cho*_*ouk 5 java spring memory-leaks spring-batch

我们有一个 spring-batch 作业,负责将测试场景从平面文件加载到数据库中,运行我们想要测试的程序,验证其结果。

我们检查程序执行的许多场景(约 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>
Run Code Online (Sandbox Code Playgroud)

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

然而,该程序占用的内存随着时间的推移而增加。执行约 150 次后,使用的内存(开始时:约 100mo)增加了 5 倍,并增加到 5go!

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

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

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

非常感谢你的帮助。