我使用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作爲一種替代方法,也沒有幫助。我想知道爲什麼。
如果有人給我提示,以幫助我減少每個獨立子進程使用的內存,我將不勝感激。