Process

在基於 Linux 的系統上啟動程序所需的最小記憶體量是多少?

  • June 30, 2022

兩種語言的常式都很便宜:goroutine 每個 2KB,而 Elixir 程序每個 0.5KB。

我知道在BEAM中啟動一個程序需要 0.5KB 的記憶體。這在Elixir和 Erlang的情況下是如此的輕量級,而在Go的情況下則在較小程度上似乎是使用這些執行時的優勢,與其他依賴於它們自己的不那麼便宜的程序和執行緒或依賴的語言相比底層 OS的程序和執行緒(據說也需要更多記憶體)。

我想知道在基於 Linux 的系統上啟動程序需要多少記憶體。我知道記憶體使用情況取決於程序在做什麼。但我假設只是啟動一個什麼都不做的程序會產生記憶體成本)。那費用是多少?

我在哪裡可以閱讀更多關於它的資訊?有沒有我可以檢查的文件/命令?

在 Linux 上,任何執行緒或程序至少會產生task_struct核心中的 a 成本;在我的系統上,pahole task_struct告訴我這需要 9,344 個字節。在使用者空間中,執行緒還需要為其分配一個堆棧,但實際成本將取決於它實際使用的堆棧空間量(因為只有被觸摸的頁面才會被分配)。

您可以使用 和 中的範例man pthread_attr_init程序pthread_create。後者特別允許您控制堆棧大小和創建執行緒的數量,這意味著可以通過執行它並測量它使用的記憶體量來估計使用者空間中單個執行緒的成本。GNUtime對大量執行進行平均,建議在此特定場景中每個執行緒有 48KiB 的懲罰,堆棧為 64KiB。

分叉的成本要高一些,因為這涉及為程序創建一個新的地址空間,以及核心中的相關結構和頁表條目。

引用自:https://unix.stackexchange.com/questions/708104