12.9. 使用 sysctl(8) 进行调整

sysctl(8) 是用来对运行中的 FreeBSD 系统进行修改的命令。这包括许多 TCP/IP 协议栈和虚拟内存系统的高级选项,对于有经验的系统管理员来说,可以极大地提高性能。使用 sysctl(8) 可以读取和设置超过五百个系统变量。

在其核心部分,sysctl(8) 有两个功能:读取和修改系统设置。

要查看所有可读的变量,请输入:

  1. % sysctl -a

要查看某个特定的变量,请指定它的名称:

  1. % sysctl kern.maxproc
  2. kern.maxproc: 1044

要设置一个特定的变量,使用:变量 = 值的语法:

  1. # sysctl kern.maxfiles=5000
  2. kern.maxfiles: 2088 -> 5000

sysctl变量的设置通常是字符串、数字或布尔值,其中布尔值是 1 时表示是,0 表示否。

要在机器每次启动时自动设置一些变量,可以将它们添加到 /etc/sysctl.conf 中。更多信息,请参考 sysctl.conf(5) 手册页面和 12.9.1. sysctl.conf。

12.9.1. sysctl.conf

sysctl(8)的配置文件 /etc/sysctl.conf,看起来很像 /etc/rc.conf 。值是以 变量=值 的形式设置的,指定的值在系统进入多用户模式后被设置。不是所有的变量都可以在这种模式下设置。

例如,为了关闭对致命信号退出的记录,并防止用户看到其他用户启动的进程,可以在 /etc/sysctl.conf 中设置以下调整项:

  1. # Do not log fatal signal exits (e.g., sig 11)
  2. kern.logsigexit=0
  3. # Prevent users from seeing information about processes that
  4. # are being run under another UID.
  5. security.bsd.see_other_uids=0

12.9.2. sysctl(8) 只读

在某些情况下,可能需要修改只读的 sysctl(8) 值,这将需要重新启动系统。

例如,在某些型号的笔记本电脑上,cardbus(4) 设备不会探测内存范围,会出现类似的错误:

  1. cbb0: Could not map register memory
  2. device_probe_and_attach: cbb0 attach returned 12

修复这个问题时,需要更改 sysctl(8) 的只读设定,为此,可向 /boot/loader.conf 添加hw.pci.allow_unsupported_io_range=1 并重启。现在 cardbus(4) 应该能够正常运行了。