Freebsd

freebsd 7.2 kern.threads.max_threads_per_proc 重啟後不會改變

  • December 30, 2019

我的伺服器機器上有一些基於 FreeBSD 7.2 的多執行緒應用程序,因此我需要將 kern.threads.max_threads_per_proc 增加到 4000(預設值為 1500)。我使用“sysctl kern.threads.max_threads_per_proc=4096”對其進行了更改,看起來還可以,但是重新啟動後,此選項再次具有預設值。我也嘗試使用 /boot/loader.conf 但它仍然返回預設值。

這是 loader.conf 中包含的內容:

kern.maxdsiz=1073741824
kern.maxtsiz=1073741824
kern.maxssiz=268435456
kern.maxproc=10000
kern.maxprocperuid=9000
kern.threads.max_threads_per_proc=4000

即使使用此設置,“sysctl kern.threads.max_threads_per_proc”也會在重新啟動後顯​​示預設值 (1500)。

請告訴我如何永久更改此設置?

好吧,首先感謝您的所有回答。他們當然沒問題,但我的問題的原因有點深,在核心原始碼中:)

我嘗試逐步說明我的解決方案,我發現了什麼。所以,就像@citrin 所說kern.threads.max_threads_per_proc的,需要在 sysctl.conf 中設置。但這無助於改變超過 1500 的值(順便說一下,這是核心最大值和預設值)。所以,這是因為系統中有另一個限制覆蓋任何使用者定義的值。我不知道它到底在哪裡,所以我試圖在核心原始碼中找到一些東西。

我在核心原始碼中找到了這個值:/usr/src/sys/kern/kern_thread.c. 它包含如下程式碼:

int max_threads_per_proc = 1500;
SYSCTL_INT(_kern_threads, OID_AUTO, max_threads_per_proc, CTLFLAG_RW,
&max_threads_per_proc, 0, "Limit on threads per proc");

我將該值更改為 5000 並使用GENERIC配置建構新核心並安裝它。我有點驚訝,因為我在 sysctl.conf 中設置了執行緒限制 4096,但工作值是 5000,就像在原始碼中一樣。儘管核心值以某種方式覆蓋了使用者定義,所以,這仍然會引起問題,但現在我的問題已經解決,執行緒限制被永久增加。

再次感謝您的回答。

有兩種不同的方法來調整核心參數 - 載入程序可調參數和 sysctl。

  1. 載入程序可調參數保存在文件 /boot/loader.conf - 它們由載入程序導出到核心環境並在核心啟動時生效。啟動後,您可以通過kenv命令查看此值。此環境可以通過 kenv 命令更改,但這僅對核心模組讀取的 tanables 有用。例如。你可以設置 kern.hwpmc.nbuffers=32 而不是 kldunload/kldload hwpmc 模組。但一般情況下,您需要在 /boot/loader.conf 更改後重新啟動。
  2. sysctl 變數。許多 sysctl 值可以在執行時通過sysctl命令進行更改。要在重新啟動後重新應用 sysctl 更改,可以將其保存在 /etc/sysctl.conf 文件中。

許多載入程序可調參數(但不是全部)具有相應的同名只讀 sysctl。但總的來說,載入器可調參數和 sysctl 之間沒有 1:1 的映射。例如。許多 sysctl 沒有同名的 loader 可調參數,並且不能通過 loader.conf 更改它們。

kern.threads.max_threads_per_proc只是sysctl,應該保存在/etc/sysctl.conf

引用自:https://serverfault.com/questions/575243