Spring Batch,HSQLDB随着时间的推移而不断增长

时间:2016-11-17 18:48:43

标签: java spring memory-leaks spring-batch hsqldb

我使用spring批量来监控Rabbit MQ。我试图通过每秒运行批次来减轻压力。到目前为止,它正在顺利运行,但已使用的Perm Generation space正在不断增长。当批处理开始时,30 MB现在30 Hours运行后300 MB处于org.hsqldb.persist.RowStoreAVLMemory 28619232 org.hsqldb.Database 96661000 。占用内存的最大对象是

HSQLDB

这两个对象占总内存的32%。

任何人都可以建议如何配置from collections import defaultdict keys,types = defaultdict(int), defaultdict(int) for jline in yourjsonfile.readlines(): line=json.loads(jline) keys[line['key']] += 1 types[line['type']] += 1 不能保存超过5分钟的信息,因为我们没有任何要求重新启动的工作。

1 个答案:

答案 0 :(得分:0)

您正在使用HSQLDB和默认的all-in-memory表。所有数据都保存在内存中。这种类型的表允许非常快速的操作,非常适用于数据不会超出一定限制的用例。

您可以添加任务以定期删除旧行。这可以是在增长的表上声明的TRIGGER,它会在插入新行后根据其时间戳删除旧行。

或者,您可以使用CACHED表,它主要将数据保存在磁盘上。您可以将;hsqldb.default_table_type=cached添加到JDBC连接URL的末尾。在这种情况下,URL必须指示基于文件的数据库,而不是内存数据库。

因此,如果您愿意,HSQLDB的行为方式与外部数据库相同。