我使用Linux for ARM处理器进行线缆调制解调器。我写了一个工具,它使用原始套接字发送/暴发定制的UDP数据包。我从零开始构建数据包,以便我们可以灵活地使用不同的选项。这个工具主要用于压力测试路由器。子进程的内存优化
我实际上已经创建了多个接口。每个接口将使用DHCP获取IP地址。这是为了使调制解调器像虚拟客户端设备(vcpe)一样工作。
当系统启动时,我启动要求的那些进程。我开始的每个过程都会不断发送数据包。因此进程0将使用接口0发送数据包等。每个发送数据包的进程都允许进行配置(在运行时更改UDP参数和其他选项)。这就是我决定分开处理的原因。
我使用fork和excec从调制解调器的调配过程开始这些过程。
现在的问题是每个进程占用大量内存。只启动3个这样的进程,导致系统崩溃并重启。
我曾尝试以下:
我一直认为推动更多的代码共享库会有所帮助。所以当我尝试将许多函数移动到共享库中并在进程中保留最小代码时,我感到意外并没有什么区别。我还删除了所有数组,并使它们使用堆。但它没有区别。这可能是因为进程持续运行,如果它是堆栈或堆没有区别?我怀疑我从哪里调用fork的过程是巨大的,这就是我使得结果很大的过程的原因。我不知道我还能如何去做。说过程A是巨大的 - >我通过分叉和excec来启动过程B. B继承了A的内存区域。所以,现在我这样做 - > A启动C,它启动B也不会帮助,因为C仍然继承A ?.我用vfork作为一种替代方法,也没有帮助。我想知道为什么。
如果有人给我提示,以帮助我减少每个独立子进程使用的内存,我将不胜感激。