2011-12-01 11 views
0

問題使內存限制成爲構建過程的一部分的強大策略是什麼?

我有一個通過了所有測試生成服務器,但在某些機器上,測試失敗由於內存限制。

提出的解決方案

我想精確內存限制添加到我的Ant構建腳本 - 有沒有簡單的方法來做到這一點,讓所有JVM的用來編譯,構建和測試我的程序有確切相同的內存規格?此外,請注意:我不想通過在shell腳本中添加某些「-Xmx」標誌來「修補」修復 - 相反,我希望內存限制成爲ANT構建的一個自然和固有的方面。

最重要的是:正如您所預料的那樣,此處的優先級是我不想由於未知的,特定於計算機的JVM參數而導致測試失敗。相反,如果JVM低於內存要求,我希望完全停止構建,在編譯/測試/等之前。

基本原理

這是當一個特定的單元測試失敗,因爲內存相當麻煩,因爲你不知道閹羊失敗做是由於糟糕的代碼(即內存泄漏),或者只是一個壞hardward/JVM設置。因此在構建引擎中使「內存」成爲「不移動」部分是合乎需要的。

回答

1

取決於你如何運行你的測試,你沒有提到。

例如,junit task具有maxmemory屬性。

如果你不分叉,你可能會遇到內存問題。

更多細節可以讓人們更好地定位答案。

您的編輯後

指定JVM參數,即使有,他們可以由用戶,CI系統覆蓋了機器上定義的系統性能等

另外,測試佔用的內存基本上是任意數量 - 除非您知道測試所需的最大內存量,但在現實生活中,我沒有看到如何消除內存不足的可能性。

您的Ant構建,腳本和任務參數定義一致內存參數並確保執行的方式啓動JVM時處於一致狀態。

+0

謝謝 - 那麼......最後一顆子彈的處方是什麼?我如何確保JVM的一致狀態?我實際上是分叉,所以我想你是建議增加單元測試任務的maxmemory參數是要走的路?我發現這可以在我的機器上運行..但是我想確保它是確保多開發人員CI系統的JVM狀態一致性的正確方法。 – jayunit100

+0

@ jayunit100我認爲我們只是爲CI服務器設置了腳本參數,併爲junit測試分配了最大內存的測試,並且使用了任何可用於非junit測試的機制。不是我們很擔心的事情;無論發生什麼泄漏,我們只會調整內存參數。 –

相關問題