Debian 安裝上的「threads-max」較低

Debian 安裝上的「threads-max」較低

我有兩個不同的 debian 10 安裝,都有 4 個核心/8GB-RAM(將它們命名為 A 和 B)。

但 的值/proc/sys/kernel/threads-max卻截然不同:A=63388,B=7055。

threads-max 的值應該是total virtual memory / stack size[1]。兩個安裝中堆疊大小和虛擬記憶體的值相同(ulimit -s=8192,ulimit -v=無限制),兩個系統上的交換都已關閉。此外,其他 sysctl 相關配置在兩台虛擬機器中也類似。

threads-max那麼,造成兩個系統差異的原因是什麼呢?

PS1: 的值為cat /proc/zoneinfo | grep spanned | awk '{totalpages=totalpages+$2} END {print totalpages}':A=2359295 和 B=6029273

PS2:核心啟動標誌 和/etc/initramfs-tools/modulesA/B 中的相同。 A 使用 vmware 進行配置,B 使用 proxmox 進行設定。

PS3:我發現dmesg | grep Memory:兩台虛擬機器有所不同:(https://github.com/torvalds/linux/blob/v4.19/mm/page_alloc.c#L7060

A| Memory: 8113684K/8388020K available (10252K kernel code, 1241K rwdata, 3320K rodata, 1592K init, 2272K bss, 274336K reserved, 0K cma-reserved)
B| Memory: 903068K/1048032K available (10252K kernel code, 1242K rwdata, 3328K rodata, 1600K init, 2260K bss, 144964K reserved, 0K cma-reserved)

8113684 / 903068 = 63388 / 7055

答案1

來自4.19.170的源碼,在檔案Documentation/sysctl/kernel.txt中:

最大線程數

該值控制可以使用 fork() 建立的最大執行緒數。

在初始化期間,核心設定此值,以便即使建立了最大數量的線程,線程結構也僅佔用可用 RAM 頁的一部分(1/8)。

可寫入threads-max 的最小值為20。如果將超出此範圍的值寫入threads-max,則會發生錯誤EINVAL。

寫入的值將根據可用 RAM 頁進行檢查。如果線程結構佔用太多(超過 1/8)可用 RAM 頁,threads-max 就會相應減少。

這意味著您可以直接設定此參數或使用

# sysctl kernel.threads-max=255353

該值在兩個系統上不同,因為它們具有不同的核心版本或引導過程不同或系統配置不同。此外,它們應該具有不同的值,因為如上所述,該值取決於其他兩個可配置參數,並且您的系統並不相同。

相關內容