FreeBSD下的系统性能调优( 四 )


缺省值将会得到完全不同的结果 。你可以分开调整接收和发送缓冲区的大小 。
例如 , 如果你的机器主要是做web服务的 , 那么你可以减少接收缓冲区的大小
用来增加发送缓冲区的大小而不用吃掉更多的内核内存 。注意路由表(参见
route(8) )能用于与路由相关的发送和接收缓冲去的缺省大小 。另外一
个工具是你能用防火墙规则中的管道(pipe)限制从某个IP地址或端口区出去
或进来的流量 。
例如 , 如果你有T1线路 , 你可能想要限制web流量为整个T1线路的70%而把余
下的带宽留给mail和交互方式的使用 。通常一个被繁忙地访问的web服务器
不会显著的增加对其他服务的时延 , 但是强制这个限制能使事情更加光滑导
致更长时间的稳定 。为了确信不使用太多的带宽 , 许多人也人为地强制带宽
限制 。

除非双方主机支持TCP的窗口伸缩扩展 , 把TCP发送和接收缓冲区定为大于65535
将导致魔术般的性能提升 , 窗口伸缩由net.inet.tcp.rfc1323控制 。这个
扩展应该被使能并且为了在一些网络链路上获得好的性能 , TCP缓冲区大小
应该设置为大于65536 , 特别是千兆广域网和高时延的卫星链路 。

我们建议你打开这个开关(设置为1)并且让net.inet.tcp.always_keepalive
也设置为1 。缺省是off的 。这增加了一些网络带宽的使用 , 但是一些死掉的
连接最终能被识别并清除 。死的TCP连接是被拨号用户存取的系统的一个特别
的问题 , 因为用户经常断开modem而不正确的关闭活动的连接 。

kern.ipc.somaxconn限制接收TCP连接的侦听队列(listen queue)的大小 。缺省
是128 , 这对在一个繁忙的web服务器环境中可靠的处理新的连接来说太小了 。
在那样的环境中 , 我们建议增加这个值调到1024或更高 。服务进程可能自己限
制侦听队列的长度(例如sendmail(8) , apache)但是总会有一个配置项在配置文件
中允许你调整队列的大小 。大的侦听队列也能更好的抵挡Dos攻击 。

kern.maxfiles决定系统支持打开多少个文件 。缺省的是几千个但如果你在运行
数据库或大的很吃描述符的进程可以把它设到1万或2万个 。

vm.swap_idle_enabled在大的多用户系统中是很有用的 , 那里有大量的用户进
入和离开系统而且有大量的空闲进程 。那种系统趋势是对于空闲内存的保留上产
生大量持续的压力 。打开这个功能调整换出(空闲秒数) 。通过vm.swap_idle_
threhold1和vm.swap_idle_threshold2允许你以比普通换出算法更快的速度降
低与空闲进程联系着的页面的优先级 。这等于帮了换出守护进程(pageout
daemon)一把 。不要打开这个选项 , 除非你需要它 , 因为你在做的交易是预先
而不是后来吃掉更多的交换空间和磁盘带宽 。在一个小系统上这个选项有影响
而在一个已经发生换页的大系统上这个选项允许VM系统更加容易地把整个进程
换出或换如内存 。

BOOT-TIME SYSCTL TUNING
有些sysctl在运行时是不能调整的因为内存申请必须在引导的早期进行 。要改
变这些sysctl , 你必须把这些值放在loader.conf(5)并且重新启动系统 。

kern.maxusers缺省值是难以相信的低 。对于现在大多数机器 , 你可能需要增
加这个值到64 , 128或256 。我们不建议你超过256除非你需要一个巨大的文件
描述符数量 。网络缓冲区也将被影响但是可以由另外的内核选项来控制 。不要
只是使用maxusers来增加网络mbuf 。比FreeBSD4.4旧的系统没有这个sysctl需
要使用内核配置选项maxusers来设置 。

kern.ipc.nmbclusters可以调整用来增加系统愿意申请的网络mbuf的数量 。每

推荐阅读