什么是使内存限制成为构建过程一部分的强大策略?

时间:2011-12-01 22:59:14

标签: java memory ant junit jvm

问题

我有一个构建服务器,它通过所有测试,但在某些机器上,由于内存限制,测试失败。

建议的解决方案

我想为我的Ant构建脚本添加精确的内存限制 - 是否有一种简单的方法可以执行此操作,以便用于编译,构建和测试程序的所有JVM具有完全相同的内存规范?另外,请注意:我不想通过向shell脚本添加某些“-Xmx”标志来“发现”修复 - 相反,我希望内存限制是ANT构建的自然和固有方面。

最重要的是:正如您所料,这里的优先级是我不希望由于未知的,机器特定的JVM参数而导致测试失败。相反,如果JVM低于内存要求,我希望在编译/测试/等之前完全停止构建。

理由

当特定的单元测试由于内存而失败时,这是非常令人不安的,因为您不知道故障是由于错误的代码(即内存泄漏)还是仅仅是糟糕的硬件/ JVM设置。因此,希望在构建引擎中使“存储器”成为“非移动”部分。

1 个答案:

答案 0 :(得分:1)

取决于你如何运行测试,你没有提到。

例如,junit task具有maxmemory属性。

如果你没有分叉,你可能还会遇到内存问题。

更多详情可让人们更好地定位答案。

编辑后

指定JVM参数,即使在计算机上定义了系统属性,它们也可以被用户,CI系统等覆盖。

此外,测试需要基本上任意数量的内存 - 除非你知道测试所需的内存最多,但在现实生活中,我不知道如何消除内存耗尽的可能性。

您的Ant构建,脚本和任务参数定义一致内存参数的方法,并确保执行JVM在启动时处于一致状态。