PROBLEM
我有一个构建服务器,它通过了所有测试,但在某些机器上,由于内存限制,测试失败。
建议方案
我想在我的Ant构建脚本中添加精确的内存限制-是否有一种简单的方法可以做到这一点,以便用于编译,构建和测试我的程序的所有JVM都具有完全相同的内存规格?另外,请注意:我不想通过向shell脚本添加某些"-Xmx"标志来"发现"修复——相反,我希望内存限制成为ANT构建的一个自然和固有的方面。
最重要的是:正如你所期望的,这里的优先级是我不希望测试由于未知的、特定于机器的JVM参数而失败。相反,如果JVM低于内存要求,我希望在编译/测试/等之前完全停止构建。
<原理/strong>
当一个特定的单元测试由于内存而失败时,这是相当麻烦的,因为你不知道失败是由于错误的代码(即内存泄漏)还是仅仅是由于糟糕的硬件/JVM设置。因此,让"内存"成为构建引擎中"不可移动"的部分是可取的。
取决于您如何运行测试,您没有提及。
例如,junit任务具有maxmemory
属性。
如果你没有分叉,你也可能会遇到内存问题。
更多的细节可以让人们更好地找到答案。
编辑后
您指定JVM参数,即使在机器上定义了系统属性,它们也可以被用户、CI系统等覆盖。
此外,测试基本上占用任意数量的内存——除非您知道测试将占用的最大内存,否则在现实生活中,我不知道如何消除内存耗尽的可能性。
您的Ant构建、脚本和任务参数 是定义一致内存参数并确保执行JVM在启动时处于一致状态的方法。