我的应用程序层协议工作正常,但是当节点数量很大(超过600)时,它会退出而没有任何错误。 我跟踪代码并没有发现任何问题。这似乎是一个内存问题,因为节点数量很大并且做了很多操作。
更新
在我的申请中:
使用BypassRouting,BypassMAC,Radio cc2420。
Castalia适用于大于600的节点,从我之前的实验到达2500,但模拟时间较短......所以它取决于节点数和模拟时间之间的关系以及每秒发送消息的数量。
单个实验成功运行 ...但是在运行时例如使用30种子(即-r 30)...&节点数= 110
在exp 13模拟时间= 1000s后停止
&安培;如果模拟时间= 600s
, 在exp 22之后停止如何在模拟运行期间从不必要的东西中释放内存。 (注意:之前我增加了交换内存并且在特定限制下工作)
谢谢,
答案 0 :(得分:2)
如果没有关于您的应用程序和模拟场景的更多信息,很难提供非常具体的建议。至少,您可以提供您的ini文件和有关您正在使用的任何自定义模块的信息(例如您的应用程序模块)。您是否正在使用任何移动节点?你使用哪种协议?你的app模块做什么?一般来说,Castalia应该能够处理600个节点。过去,我们已经测试了具有数千个(静态)节点的Castalia。
您可以使用内存分析器。一个优秀的工具(真正的一套工具)是valgrind
。您可以找到内存泄漏,还可以对程序进行内存分析。 valgrind的堆分析器工具称为' massif':
Massif是一个堆分析器。它通过获取程序堆的常规快照来执行详细的堆分析。它生成一个图表,显示随时间变化的堆使用情况,包括有关程序的哪些部分负责大多数内存分配的信息。该图由文本或HTML文件补充,该文件包含用于确定分配最多内存的位置的更多信息。 Massif运行程序比正常情况慢20倍。
阅读valgrind documentation了解详情。这是您调用该工具的方式:
valgrind --tool=massif <executable> <arguments>
本例中的可执行文件是CastaliaBin
(不是Castalia
python脚本,它是更高级别的执行工具。)