12.9. 使用 sysctl(8) 进行调整
sysctl(8)
是用来对运行中的 FreeBSD 系统进行修改的命令。这包括许多 TCP/IP 协议栈和虚拟内存系统的高级选项,对于有经验的系统管理员来说,可以极大地提高性能。使用 sysctl(8)
可以读取和设置超过五百个系统变量。
在其核心部分,sysctl(8)
有两个功能:读取和修改系统设置。
要查看所有可读的变量,请输入:
% sysctl -a
要查看某个特定的变量,请指定它的名称:
% sysctl kern.maxproc
kern.maxproc: 1044
要设置一个特定的变量,使用:变量 = 值
的语法:
# sysctl kern.maxfiles=5000
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
中设置以下调整项:
# Do not log fatal signal exits (e.g., sig 11)
kern.logsigexit=0
# Prevent users from seeing information about processes that
# are being run under another UID.
security.bsd.see_other_uids=0
12.9.2. sysctl(8)
只读
在某些情况下,可能需要修改只读的 sysctl(8)
值,这将需要重新启动系统。
例如,在某些型号的笔记本电脑上,cardbus(4)
设备不会探测内存范围,会出现类似的错误:
cbb0: Could not map register memory
device_probe_and_attach: cbb0 attach returned 12
修复这个问题时,需要更改 sysctl(8)
的只读设定,为此,可向 /boot/loader.conf
添加hw.pci.allow_unsupported_io_range=1
并重启。现在 cardbus(4)
应该能够正常运行了。