freebsd 7.2 kern.threads.max_threads_per_proc 重啟後不會改變
我的伺服器機器上有一些基於 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。
- 載入程序可調參數保存在文件 /boot/loader.conf - 它們由載入程序導出到核心環境並在核心啟動時生效。啟動後,您可以通過
kenv
命令查看此值。此環境可以通過 kenv 命令更改,但這僅對核心模組讀取的 tanables 有用。例如。你可以設置 kern.hwpmc.nbuffers=32 而不是 kldunload/kldload hwpmc 模組。但一般情況下,您需要在 /boot/loader.conf 更改後重新啟動。- 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