Memory 卡斯塔利亚记忆问题

Memory 卡斯塔利亚记忆问题,memory,omnet++,Memory,Omnet++,我的应用层协议工作正常,但当节点数很大(超过600个)时,它会毫无错误地退出。 我追踪了代码,没有发现任何问题。这似乎是一个内存问题,因为节点的数量很大,需要执行许多操作 更新: 在我的申请中: 在所有模拟时间内,每个节点每秒广播2msg MSG包含许多与我的应用程序相关的信息 所有节点都是静态的 使用旁路路由、旁路MAC、无线电cc2420 Castalia适用于大于600的节点,从我之前的实验中可以达到2500个,但模拟时间较短。。。因此,它取决于节点数与模拟时间和每秒发送消息数之间的关系

我的应用层协议工作正常,但当节点数很大(超过600个)时,它会毫无错误地退出。 我追踪了代码,没有发现任何问题。这似乎是一个内存问题,因为节点的数量很大,需要执行许多操作

更新:

在我的申请中:

  • 在所有模拟时间内,每个节点每秒广播2msg
  • MSG包含许多与我的应用程序相关的信息
  • 所有节点都是静态的
  • 使用旁路路由、旁路MAC、无线电cc2420

  • Castalia适用于大于600的节点,从我之前的实验中可以达到2500个,但模拟时间较短。。。因此,它取决于节点数与模拟时间和每秒发送消息数之间的关系

单个实验成功运行。。。但当运行时,例如30个种子(即-r 30)节点数=110

其在exp 13模拟时间=1000秒后停止

&如果模拟时间=600秒,则在exp 22之后停止

如何在模拟运行期间从不必要的东西中释放内存。 (注意:之前我增加了交换内存,并为特定限制工作)


谢谢,

如果没有关于您的应用程序和模拟场景的更多信息,很难提供非常具体的建议。至少,您可以提供您的ini文件和有关您正在使用的任何自定义模块的信息(例如,您的应用程序模块)。例如,您是否使用任何移动节点?您使用的是哪些协议?你的应用程序模块是做什么的?一般来说,Castalia应该能够处理600个节点。在过去,我们使用数千个(静态)节点测试了Castalia

您可以使用内存分析器。一个优秀的工具(实际上是一套工具)是
valgrind
。您可以找到内存泄漏,也可以对程序进行内存配置。valgrind的堆探查器工具称为“massif”:

Massif是一个堆分析器。它通过获取程序堆的常规快照来执行详细的堆分析。它生成一个图表,显示一段时间内堆的使用情况,包括程序中负责内存分配最多的部分的信息。图形由文本或HTML文件补充,该文件包含更多信息,用于确定分配的内存最多的位置。Massif运行程序的速度比正常速度慢20倍左右

有关更多信息,请阅读。这是调用该工具的方式:

valgrind --tool=massif <executable> <arguments>
valgrind--tool=massif

本例中的可执行文件是
CastaliaBin
(不是
Castalia
python脚本,它是一种更高级别的执行工具)。

如果没有关于应用程序和模拟场景的更多信息,很难提供非常具体的建议。至少,您可以提供您的ini文件和有关您正在使用的任何自定义模块的信息(例如,您的应用程序模块)。例如,您是否使用任何移动节点?您使用的是哪些协议?你的应用程序模块是做什么的?一般来说,Castalia应该能够处理600个节点。在过去,我们使用数千个(静态)节点测试了Castalia

您可以使用内存分析器。一个优秀的工具(实际上是一套工具)是
valgrind
。您可以找到内存泄漏,也可以对程序进行内存配置。valgrind的堆探查器工具称为“massif”:

Massif是一个堆分析器。它通过获取程序堆的常规快照来执行详细的堆分析。它生成一个图表,显示一段时间内堆的使用情况,包括程序中负责内存分配最多的部分的信息。图形由文本或HTML文件补充,该文件包含更多信息,用于确定分配的内存最多的位置。Massif运行程序的速度比正常速度慢20倍左右

有关更多信息,请阅读。这是调用该工具的方式:

valgrind --tool=massif <executable> <arguments>
valgrind--tool=massif

本例中的可执行文件是
CastaliaBin
(不是
Castalia
python脚本,它是一个更高级别的执行工具)。

谢谢,博士。我用更多信息更新了问题。谢谢,使用massif工具,我找到了占用内存的代码位置。谢谢,博士。我用更多信息更新了问题。谢谢,使用massif工具,我找到了占用内存的代码所在的位置。