關於共享記憶體的幾句話
共享記憶體允許進程透過將公共結構和資料放置在共享記憶體段中來存取它們。它是可用的最快的進程間通訊形式,因為在進程之間傳遞資料時不會發生核心參與。事實上,進程之間不需要複製資料。
我們注意到紅帽機器的價值是巨大的,如下所示
cat /proc/sys/kernel/shmmax
17446744003692774391
sysctl -a | grep kernel.shmmax
kernel.shmmax = 17446744003692774391
當我計算到千兆時 - 16248546544.17632
符合邏輯嗎? ,我們是不是錯過了什麼
機器有64G和16個CPU,用於hadoop集群
答案1
這預設值對於shmmax
是
#define SHMMAX (ULONG_MAX - (1UL << 24))
這是一個上限,選擇盡可能大,同時限制溢出風險:
SHMMNI、SHMMAX 和 SHMALL 是預設上限,可以透過 sysctl 修改。 SHMMAX 和 SHMALL 值已選擇為盡可能大,而不會促進透過「檢索當前限制;添加 X;更新限制」形式的操作調整限制時用戶空間導致溢出的情況。因此不建議將 SHMMAX 和 SHMALL 設定得更大。這些限制適用於 32 位元和 64 位元系統。
其價值原樣良好;設定正確,沒有錯誤。