14.7.使用 sysctl(8) 进行优化 ============================ `sysctl(8) `__ 是用来对正在运行的 FreeBSD 系统进行修改的命令。这包括许多 TCP/IP 协议栈和虚拟内存系统的高级选项,对于有经验的系统管理员来说,可以极大地提高性能。使用 `sysctl(8) `__ 可以对超过五百个系统变量进行读取和设置。 在其核心部分,\ `sysctl(8) `__ 有两个功能:读取和修改系统设置。 要查看所有可读变量,请输入: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session % sysctl -a 要查看某个特定的变量,请指定其名称: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session % sysctl kern.maxproc kern.maxproc: 1044 要设置一个特定的变量,使用语法 *变量=值* : .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # sysctl kern.maxfiles=5000 kern.maxfiles: 2088 -> 5000 sysctl 变量值通常是字符串、数字或布尔值,其中布尔值为 ``1`` 时表示 yes,为 ``0`` 表示 no。 要在机器每次启动时自动设置一些变量,可以将其添加到 **/etc/sysctl.conf** 中。更多信息,请参考 `sysctl.conf(5) `__ 手册页面和 `sysctl.conf `__\ 。 14.7.1. **sysctl.conf** ----------------------- `sysctl(8) `__ 的配置文件 **/etc/sysctl.conf**\ ,看起来很像 ``/etc/rc.conf``\ 。值是以 ``变量=值`` 的形式设置的,指定的值在系统进入多用户模式后被设置。并非所有的变量都可以在该模式下进行设置。 例如,为了关闭对 fatal 信号退出的记录,并防止用户看到其他用户启动的进程,可以在 **/etc/sysctl.conf** 中设置以下参数: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # 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 14.7.2.只读 `sysctl(8) `__ -------------------------------------------------------------------------------------------------- 在某些情况下,可能需要修改只读 `sysctl(8) `__ 值,这将需要重启系统。 例如,在某些型号的笔记本电脑上,\ `cardbus(4) `__ 设备不能探测内存范围,并会出现类似的错误: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session 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) `__ 应该就能够正常运行了。