freebsd 7.2 kern.threads.max_threads_per_proc在重启后不会改变

我的服务器上有一些基于FreeBSD 7.2的multithreading应用程序,因此我需要增加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)。

请告诉我,我怎样才能永久改变它?

调整内核参数有两种不同的方法 – 加载器可调参数和sysctl。

  1. 加载程序可调参数保存在文件/boot/loader.conf中 – 由加载程序导出到内核环境,并在内核启动时生效。 开机后,你可以通过kenv命令看到这个值。 这个环境可以通过kenv命令来改变,但是这仅仅适用于内核模块所支持的tanable。 例如, 你可以设置kern.hwpmc.nbuffers = 32而不是kldunload / kldload hwpmc模块。 但是一般来说,你需要在/boot/loader.conf改变之后重启。

  2. sysctl varuables。 许多sysctl值可以通过sysctl命令在运行时更改。 重新启动后重新应用sysctl更改可以保存在/etc/sysctl.conf文件中。

许多加载器可调参数(但不是全部)具有相同的名称相应的只读sysctl。 但通常情况下,加载器可调参数和sysctl之间不存在1:1映射。 例如, 许多sysctl没有装载器可调参数,并且不能通过loader.conf来改变。

kern.threads.max_threads_per_proc只是sysctl,应该保存在/etc/sysctl.conf

你的/boot/loader.conf是否被授予? loader.conf(5)指出/boot/loader.rc需要包含以下几行:

 包括/boot/loader.4th
 开始

/boot/loader.4th依次载入/boot/defaults/loader.conf ,如果包含这样的内容,它可能会载入/boot/loader.conf

 loader_conf_files =“/ boot / device.hints /boot/loader.conf /boot/loader.conf.local”

那么,首先感谢你的答案。 他们当然都是正确的,但是我的问题的原因是内核源代码更深入:)

我试图逐步解释我的解决scheme,我发现了什么。 所以,就像@citrin所说,需要在sysctl.conf中设置kern.threads.max_threads_per_proc 。 但是这并没有帮助改变1500以上的值(这是内核最大和默认的方式)。 所以,这是因为系统中有另一个限制覆盖任何用户定义的值。 我不知道它在哪里,所以我试图在内核源代码中find一些东西。

我在内核源代码中find了这个值: /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,并使用GENERICconfiguration构build新内核并进行安装。 对我来说有一点惊喜,因为我在sysctl.conf中设置了4096的线程限制,但是工作值是5000,就像源代码一样。 尽pipe内核值会覆盖用户定义的内容,但是这仍然会引起问题,但现在我的问题已经解决,线程的限制被永久地增加了。

再次感谢您的答案。