2011-11-18 34 views
0

我正在運行使用NS-2的5000個節點及以上的模擬。無法分配字節 - NS-2中的大規模模擬

我也遇到了以下錯誤:

unable to alloc 32026 bytes」 [許多這樣的錯誤]和 「bus error

我用我的代碼多達500個節點,它工作得很好。現在我正在模擬大型網絡。有沒有人遇到過這個錯誤?

回答

0

您的內存不足。你得到這樣一個小的分配信息表明你真的真的用完內存;修復這不是微不足道的。

可能導致此問題的一種可能性是同時在同一個系統上運行太多其他程序,另一種可能性是您有內存泄漏。雖然Tcl本身對內存泄漏進行了仔細的審計,但是我不能談論NS2,而且你的腳本本身可能會通過持續引用更長的內容而導致「泄漏」。對此進行整理是一項相當大的工作。

當然,你可以採取老式的「扔更多硬件的問題」的方法。獲取Tcl和NS2的64位版本,並在具有16GB內存的系統上運行。這個選項比以前便宜很多,因爲64位硬件將成爲主流(終於!),但它不是免費的...

+0

這原來是硬件有限和節點數量衆多的組合問題(因此,可能的內存泄漏)。 進一步的實驗工作到3500節點。正如你所說,它必須是內存泄漏問題。如果可能,你是否知道有任何調試技巧來解決這個問題? 但是我們在硬件上有限。我不認爲我可以使用16GB內存的系統! – learner

+0

不好意思升級內存;這是最簡單的方法,因爲它只涉及在問題上投入資金!泄漏狩獵要困難得多。我可能需要一段時間才能提出一套很好的建議(除了看看valgrind中是否有任何東西出現,記住Tcl在內部使用特殊的內存分配器會導致誤報...) –

+0

這是真的,但我工作在大學裏。因此我不可能增加服務器上的內存容量! 謝謝你的洞察力。我將使用GDB和Valgrind來追蹤泄漏。 – learner