【问题标题】:Migrating From HSQL DB 1.8 to 2.x memory issue从 HSQL DB 1.8 迁移到 2.x 内存问题
【发布时间】:2014-01-28 22:20:56
【问题描述】:

我最近将 HQLDB 从 1.8 迁移到 2.x,之后我的集成(内存中)测试开始使用太多内存。将内存增加到 6GB 可以使测试更快,但在某些时候仍然会冻结。

我有属性 shutdown=true;在 url 参数上添加 hsqldb.write_delay=false 不会有任何区别。

在升级之前它可以正常工作。我在迁移指南http://hsqldb.org/web/hsqlFAQ.html

中找不到任何提示

【问题讨论】:

  • 如果你升级了HSQLDB版本以外的其他东西,你能把改变的东西发回来吗?还要让我们知道数据集的大小,是不是很多数据?
  • @jhadesdev 没有升级,只是用 2.3.1 替换了 hsql 1.8 而已。问题是新的 hsql 在删除表时确实存在内存问题,现在我删除表并重新创建数据库,问题就消失了。

标签: hibernate integration-testing hsqldb


【解决方案1】:

目前在 HSQLDB 中没有内存泄漏。当您使用内存数据库时,您需要删除在测试期间插入数据库的数据。您的应用中似乎没有发布数据。

确保释放模式中所有表及其数据的最简单方法是:

DROP SCHEMA schemaname CASCADE

或者在一系列测试后关闭数据库:

SHUTDOWN

在一些测试完成后,使用您的架构名称执行上述语句以释放所有数据。

与 1.8.0 版本相比,主要变化是对事务的支持。 Hibernate 以不同的方式对待新版本。因此,您需要检查是否有某个连接保持打开状态,因此在最后一个连接关闭时执行 SHUTDOWN。

【讨论】:

  • 问题是使用DELETE FROM TABLE清除了数据库表我用删除表替换它并重新创建它们解决了内存问题。
【解决方案2】:

如果您只更改了 HSQLDB 版本并且它开始出现内存问题,那么这是一个内存泄漏错误。

升级到 HSQLDB 版本 2.3.1,因为在 2.0 之后已经修复了有关内存泄漏的错误,请参阅更改列表 2.0 here,其中一个错误修复说:

修复了导致基于磁盘的速度降低和内存泄漏的问题 结果集

使用 HSQLDB 减少内存消耗:

使用这种语法创建表肯定会减少内存消耗,因为这些表存在于磁盘上,并且只有一部分加载到内存中:

CREATE CACHED TABLE YOUR_TABLE_NAME

确认 HSQLDB 是问题所在:

您始终可以使用Visual VM 对应用程序进行内存分析,以确认高内存消耗的原因。这是一个已经与JDK一起安装的工具,可以通过命令行使用命令jvisualvm启动。

查看此6 minutes tutorial video,了解它如何帮助解决内存问题。

【讨论】:

  • 感谢您的回复。我使用从 2.0 到 2.3.1 的所有版本测试了我的应用程序,并得到了相同的结果。使用几乎 3GB 内存和 1.8 没问题,最大 500mb 内存使用量。我正在做内存测试,而不是基于磁盘或服务器。我有 VisualVM 并且一直在监视线程,加载了很多类,但没有从内存中删除。还是找不到解决办法。干杯
猜你喜欢
  • 1970-01-01
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 2018-08-10
  • 2017-03-11
  • 1970-01-01
相关资源
最近更新 更多