我的服务器机器上有一些基于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“在重新启动后也会显示defalut值(1500)。
拜托,告诉我怎么才能永久改变这个?
发布于 2014-02-17 06:21:48
首先谢谢你的回答。当然,它们都很好,但是我问题的原因更深一点,在内核源代码中:)
我试着一步一步地验证我的解决方案,我发现了什么。因此,就像@citrin所说的,kern.threads.max_threads_per_proc需要设置在sysctl.conf中。但这无助于改变超过1500的值(顺便说一句,这是内核max和defaul )。因此,这是因为系统中还有另一个覆盖任何用户定义值的限制。我不知道它的确切位置,所以我试图在内核源代码中找到一些东西。
我在内核源代码中找到了这个值:/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,与源代码中的值一样。虽然内核值以某种方式覆盖了用户定义,所以,这仍然会引起问题,但是现在我的问题已经解决了,线程限制被永久地增加了。
再次感谢你的回答。
发布于 2014-02-14 09:43:13
有两种不同的方法来调优内核参数-加载器可调性和sysctl。
kenv命令看到这个值。这个环境可以通过kenv命令进行更改,但这只对内核模块读取的tanables有用。例如,您可以将kern.hwpmc.nbuffers=32和than设置为kldunload/kldload hwpmc模块。但是,通常需要在/boot/loader.conf更改之后重新启动。sysctl命令在运行时进行更改。要重新应用sysctl更改,可以将其保存在/etc/sysctl.conf文件中。许多加载程序可调(但不是全部)都有相应的同名只读sysctl。但是通常在加载程序、可调对象和sysctls之间没有1:1的映射。例如,许多sysctl没有同名可调的加载程序,它们不能通过loader.conf进行更改。
kern.threads.max_threads_per_proc仅为sysctl,应该保存在/etc/sysctl.conf中。
https://serverfault.com/questions/575243
复制相似问题