小编cho*_*ouk的帖子

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 的功能?我不需要它,因为我的工作无法重新启动。

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

非常感谢你的帮助。

java spring memory-leaks spring-batch

5
推荐指数
0
解决办法
2723
查看次数

使用Jersey和Jackson对Map进行序列化和反序列化

我有一个Pojo对象,由Jersey使用jackson序列化:

public class BookOfFriendsAnswer {
private Map<String, List<BookSummary>> books;

public BookOfFriendsAnswer() {

}

public BookOfFriendsAnswer(Map<String, List<BookSummary>> books) {
    this.books = books;
}

public Map<String, List<BookSummary>> getBooks() {
    return books;
}

public void setBooks(Map<String, List<BookSummary>> books) {
    this.books = books;
}
}
Run Code Online (Sandbox Code Playgroud)

序列化产生一个像这样的JSon:

{
  "books": {
    "entry": [
      {
        "key": "54567bbce4b0e0ef9379993e",
        "value": "BookSummary{id='54567bbde4b0e0ef9379993f', title='title 1', authors=[Steve,James] } BookSummary{id='54567bd9e4b0e0ef93799940', title='Title 2', authors=[Simon, Austin]}"
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我试图从我的客户端反序列化消息时,如下所示:

mapper.readValue(json, clazz)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

无法识别的字段"key"(类com.example.server.api.BookSummary),未标记为可忽略

我不知道问题是来自服务器生成的JSOn还是客户端的反序列化.

你知道什么是问题以及如何纠正它?

非常感谢

java json jax-rs jersey jackson

3
推荐指数
1
解决办法
6537
查看次数

标签 统计

java ×2

jackson ×1

jax-rs ×1

jersey ×1

json ×1

memory-leaks ×1

spring ×1

spring-batch ×1