Spring 数据 JPA 垃圾回收
Spring Data JPA garbage collection
我有一个带有 JpaPagingItemReader
的 Spring Batch
应用程序(我对其进行了一些修改)和 4 个 Jpa 存储库以丰富来自 JpaPagingItemReader 的 Model
。
我的流程是:
- Select
Model
(页面大小=8192),然后我收集这个List<Model> to Map<String, List<Model>>
(按id分组,因为型号不唯一我需要通过 id 来丰富它)然后用 4 个自定义 JpaRepositories
和带有 IN 子句的本地查询来丰富它,并将它们与 Java 8 Streams
. 合并
- 将数据转换为 XML 对象并使用 Stax 将
MultiFileItemWriter
写入文件,每个文件拆分不超过 20000
.
一切正常,但今天我尝试 运行 处理来自数据库的大量数据。我生成了 20 个文件 (2.2 GB)。但有时我得到 OutOfMemory Java Heap
(我有 1Gb XMS、XSS),然后我将它增加到 2GB 并且一切正常,但在 Instana 中我看到,Old gen Java memory
总是 900
GC后使用。使用中约为 1.3-1.7Gb。所以我开始思考,如何优化 Spring Data Jpa 对象的 GC。我认为他们在记忆中有很多时间。
当我使用 JpaPagingItemReader
建立 select 模型时,我会分离每个模型(使用 entityManager.detach
),但是当我使用自定义 Spring Data Jpa
请求丰富 Model
时,我不会分离结果。也许这是问题所在,我应该将它们分离?
我不需要向数据库中插入数据,我只需要读取它。或者我是否需要缩小页面大小并且每个请求 select 大约 4000?
我需要处理 370 000 条来自数据库的记录并丰富它们。
已解决。在我的 运行 配置中添加了标志,并将 XMS 和 XMX 增加了两次。
我有一个带有 JpaPagingItemReader
的 Spring Batch
应用程序(我对其进行了一些修改)和 4 个 Jpa 存储库以丰富来自 JpaPagingItemReader 的 Model
。
我的流程是:
- Select
Model
(页面大小=8192),然后我收集这个List<Model> to Map<String, List<Model>>
(按id分组,因为型号不唯一我需要通过 id 来丰富它)然后用 4 个自定义JpaRepositories
和带有 IN 子句的本地查询来丰富它,并将它们与Java 8 Streams
. 合并
- 将数据转换为 XML 对象并使用 Stax 将
MultiFileItemWriter
写入文件,每个文件拆分不超过20000
.
一切正常,但今天我尝试 运行 处理来自数据库的大量数据。我生成了 20 个文件 (2.2 GB)。但有时我得到 OutOfMemory Java Heap
(我有 1Gb XMS、XSS),然后我将它增加到 2GB 并且一切正常,但在 Instana 中我看到,Old gen Java memory
总是 900
GC后使用。使用中约为 1.3-1.7Gb。所以我开始思考,如何优化 Spring Data Jpa 对象的 GC。我认为他们在记忆中有很多时间。
当我使用 JpaPagingItemReader
建立 select 模型时,我会分离每个模型(使用 entityManager.detach
),但是当我使用自定义 Spring Data Jpa
请求丰富 Model
时,我不会分离结果。也许这是问题所在,我应该将它们分离?
我不需要向数据库中插入数据,我只需要读取它。或者我是否需要缩小页面大小并且每个请求 select 大约 4000?
我需要处理 370 000 条来自数据库的记录并丰富它们。
已解决。在我的 运行 配置中添加了标志,并将 XMS 和 XMX 增加了两次。