Java Spring batch GC开销限制| Spring batch | JBOSS 6.4

Java Spring batch GC开销限制| Spring batch | JBOSS 6.4,java,heap,spring-batch,Java,Heap,Spring Batch,我们正在使用JBOSS 6.4-jdk1.8,spring 4.2.1(批处理和集成)。 在Linux上运行 JAVA_OPTS="$JAVA_OPTS -server -Xms3g -Xmx3g 我们有12个并行运行的spring批处理作业。 它们运行了大约3个小时,之后我们开始得到GC开销限制已达到的错误 迄今为止采取的步骤如下 将堆内存从2g增加到3g,以了解实际需要多少应用程序,即使3g也不够。我们看到,在连续运行约3小时的作业后,旧的gen堆空间被填满 代码审查以确定任何潜在泄漏,

我们正在使用JBOSS 6.4-
jdk1.8
spring 4.2.1(批处理和集成)
。 在
Linux上运行

JAVA_OPTS="$JAVA_OPTS -server -Xms3g -Xmx3g 
我们有12个并行运行的spring批处理作业。 它们运行了大约3个小时,之后我们开始得到GC开销限制已达到的错误

迄今为止采取的步骤如下

  • 将堆内存从2g增加到3g,以了解实际需要多少应用程序,即使3g也不够。我们看到,在连续运行约3小时的作业后,旧的gen堆空间被填满

  • 代码审查以确定任何潜在泄漏,但未发现任何泄漏。我们已经将一些对象在使用完毕后设置为null,但这几乎是我们可以得到的

  • 添加了在OutOfMemory错误时生成堆转储的命令 下面的链接包含堆转储的详细信息。它们都指向框架类,这些类在我们的应用程序中没有直接引用

  • 关于如何找到确切的根本原因,有什么建议吗?
    目前,我们正在尝试使用Java flight Recorder获取更多具体细节。

    也许您只需要更多内存。如果这些批处理作业正在做繁重的工作,那么一次执行12个可能对您的服务器来说太多了。用更多的内存、更多的CPU或水平扩展将其提升一个档次。谢谢Kayaman。虽然我的响应很晚,但我们还是通过增加堆内存来解决这个问题。因为没有任何分析工具在代码中指出任何问题。
        o   JavaZipFileSystem 28 MB
        o   DefaultListableBeanFactory – 32 MB
        o   ModuleClassLoader – 7 MB
        o   SessionFactoryImpl – 9 MB
        o   String – 6 MB
        o   ThreadGroupContext – 3 MB