首 页文章中心

Linux学习网

您的位置Linux学习网 > Linux服务器应用 > FreeBSd > 文章内容

FreeBSD下系统性能调优

作者:佚名  来源:本站整理  发布时间:2008-7-14 17:42:00
STRIPING DISKS
        在一个更大的系统上,你可能把一个分区分布(strip)到几个驱动器上去以建立
        一个更大的分区。striping可以通过把操作分开到不同的磁盘上去而提高文件
        系统性能。vinum(8)和ccd(4)可以建立strip化的文件系统。通常的说,strip
        化一个小的分区例如根和/var/tmp或以读居多的分区例如/usr是彻底浪费时间。
        你应该strip化那些需要严重的I/O性能的分区,典型的是/var,/home和定制的
        用来存放数据库和web页的分区。选择正确的strip尺寸是同样重要的。文件系
        统企图把meta-data放在2的倍数边界上,你总是希望减少查找而不是增加查找。
        这意味着你要使用大的离心strip大小例如1152个扇区,使得顺序I/O不用查找
        几个磁盘而meta-data将分布在不同的磁盘上而不是集中在一个磁盘上。如果
        你真的很老练,我们建议你使用FreeBSD支持的控制器列表中的真正的硬件raid
        控制器。
        
        
SYSCTL TUNING
        在系统中有几百个sysctl(8)变量,包括那些看起来可以调整但是实际上不是
        的那些。在这个文档中我们将只是涵盖那些会最大地影响系统的sysctl。
        
        kern.ipc.shm_use_phys缺省是0,可以被设置成0(off)或1。把它设置1引起
        SysV共享内存段被映射到不可交换的物理内存上。这个功能只影响那些或者
        (A)映射少量内存并在很多进程间共享或(B)映射大量内存并在任意数量的进
        程间共享内存的情况。这个功能允许内核通过将共享内存页锁定在核心存储
        中而消除大量的内部内存管理和页面跟踪的开销,使得它们不可被换出。
        
        vfs。vmiodirenable缺省是0(不久将改为1)可以设置为0(off)或1(on)。这个
        参数控制目录怎样被缓存。大多数目录是小的而且只使用在文件系统中的一
        个碎块(典型的是1K)甚至在缓冲区中更小(典型的是512字节)。然而,在缺省
        的操作模式中,缓冲取只缓冲固定数量的目录哪怕你有巨量内存。把这个
        sysctl打开就允许缓冲区利用虚拟内存页缓冲来缓冲目录。这样做的一个缺
        点是最少也要用去一个物理页面(典型的是4K)而不是512字节。如果正在你正
        在运行一个需要操作大量文件的服务,我们建议你打开这个选项。这些服务
        包括web页缓冲,大mail系统,news系统。打开这个选项通常情况下不会导致
        性能下降哪怕甚至内存浪费,但是你要尝试去发现。
        
        有几个和buffer-cache及VM page cache相关的sysctl。我们不建议去弄乱
        它们。从FreeBSD 4.3开始,VM 子系统能很好的对自己做调整。
        
        如果你在运行面向网络的应用,net.inet.tcp.sendspace和net.inet.tcp.
        recvspace是特别令人感兴趣sysctl。它们控制任何一个tcp连接允许的发送
        和接收缓冲区的大小。缺省是16K。通过增加缺省值牺牲更多内核内存你总能
        够获得更高的带宽利用率。如果你正在服务成百上千个连接,我们不建议你
        增加缺省值,因为那样很容易因为滞留的连接累积起来后用完内存。
        但是如果你需要高带宽甚于更少的连接数量,特别是你有千兆以太网,增加
        缺省值将会得到完全不同的结果。你可以分开调整接收和发送缓冲区的大小。
        例如,如果你的机器主要是做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的数量。每
        个cluster(簇)大概2K的内存,所以值1024代表保留2M内核内存作为网络缓冲区。
        你可以简单的计算出需要多少。如果你有一个web服务器最多可以有1000个并发
        连接,每个连接吃掉16K接收和发送缓冲区,你大概需要32MB的网络缓冲区来对
        付它。一个比较粗糙的方法是乘以2,所以32MBx2 = 64MB/2K = 32768。所以这
        个情况下你将需要设置nmbclusters到32768。我们建议为那些内存不多的机器
        设置1024到4096而4096到32768为那些有很多内存的机器。无论如何如何你不能
        设置一个很随意的值,这可能导致启动时崩溃。netstat(1)的-m选项可以用来查
        看网络缓冲区的使用情况。老的FreeBSD系统没有这个sysctl,所以需要设置内核
        配置选项NMBCLUSTERS。
        
        越来越多的程序正在使用sendfile()系统调用通过网络传送文件。
        kern.ipc.nsfbufs用来控制sendfile()可以使用的多少文件系统缓冲区数量来
        进行工作。这个参数名义上随maxusers伸缩,所以你不应该去弄乱这个参数,
        除非在非常特殊的场合。
        
KERNEL CONFIG TUNING
        在一个大系统中有大量的内核选项你可能需要摆弄。为了改变这些选项你需要从
        源代码编译内核。config(8)和手册是学习怎样做这件事情的好起点。通常建立
        你自己的定制的内核的第一件事情是去掉所有你不用的驱动程序和服务。删除
        象INET6和你不用的驱动程序可以减少内核的大小,有时候能达1兆或几兆,留
        出更多的内存给应用程序。
        
        SCSI_DELAY和IDE_DELAY可用于减少系统启动时间。缺省值相当高,在启动时可
        引起15秒以上的延时。减少SCSI_DELAY到5秒通常是可行的。减少IDE_DELAY也是
        行的但是你必须更小心点。
        
        有很多*_CPU的选项你可以注释掉。如果你想让内核只能在奔腾类CPU上运行,
        你可以轻松的拿掉I386_CPU和I486_CPU,如果你相信你CPU可以被认作奔腾2或
        更好的CPU,你可以拿掉I586_CPU。有些clone可能被认作奔腾或486,没有这
        些选项将不能启动。如果它能工作,真是太伟大了! 操作系统将能更好地使用
        高端CPU的的MMU功能,任务切换,记时,甚至设备操作。另外,高端CPU支持
        4MB MMU页面,内核用来将自己影射到内存中,在重负荷的系统调用下这会增
        加性能。
        
IDE WRITE CACHE
        FreeBSD 4.3不认真考虑地将IDE写缓存关闭。这降低了到IDE磁盘的写盘带宽,
        但是考虑到硬盘厂商引入的严重的数据一致性问题而言是必要的。基本问题是
        IDE驱动器在写完成上说谎。当IDE写缓冲打开时,IDE硬盘不仅不会按次序将
        数据写入磁盘,而且在严重的磁盘负荷下有时会永远耽搁有些数据块。当系统
        崩溃或掉电时会导致严重的文件系统损坏。所以我们的缺省值是安全的。不幸
        的是结果是巨大的性能损失,我们投降了并在发行后把缺省值改了过来。你
        应该通过查看hw.ata.wc这个sysctl来检查你系统上的缺省值。如果IDE写缓冲
        是关闭的,你可以将通过将hw.ata.wc内核变量设置为1而将它改回来。这必须
        在boot loader(8)启动时做。企图在内核启动后在做是没有作用的。请参见
        ata(4)和loader(8)。
        
        还有IDE硬盘的一个试验性的功能叫做hw.ata.tags(也能够在boot loader中设
        置)允许写缓冲被安全地打开。这是将SCSI的tagging功能带到IDE驱动器上。
        写这篇文章时只有IBM的DPTA和DTLA驱动器支持这个功能。警告!这些驱动器
        明显有质量控制方面的问题,所以我建议你不要在这个时候买。如果你需要性
        能,选用SCSI吧。
        
CPU,MEMORY,DISK,NETWORK
        做何种调整依赖于你的系统在负载变大时哪一部分开始成为瓶颈。如果你的系统
        用完了CPU(空闲时间为0%)那你需要升级CPU或转移到SMP的主板(多CPU),或者
        你需要重新回顾你那个引起负荷的程序并试着优化它。如果系统正有大量的页面
        交换,需要考虑增加内存。如果系统真让磁盘满载通常能看到高CPU idle值和满载
        的磁盘。systat(1)可用于监视这个情况。对付磁盘满载有很多种方法:增加内存
        用于缓冲,镜象磁盘,把操作分到不同的机器等等。如果磁盘性能是个问题而且
        正在使用IDE硬盘,切换到SCSI能帮大忙。现代IDE驱动器与SCSI在低级顺序带宽
        上比较时,当你开始寻找,SCSI驱动器通常会赢。
        
        最后,你可能用完了网络带宽。提高网络性能的第一道防线用switch替换hub,特
        别是今天switch和hub一样便宜。hub由于冲突补偿在重负载下有严重问题,一个
        坏主机会严重影响整个LAN。第二是尽可能优化网络路径。例如,在firewall(7)中
        我们描述了一个保护内部主机的拓扑结构,外部可视主机不通过它路由。按照你的
        需要,使用100BaseT而不是10BaseT,或使用1000BaseT而不是100BaseT。许多瓶颈
        发生在广域网连接上(例如mode,T1,DSL等)。如果要扩展链路是不可能的,可以
        使用dummynet(4)功能实现流量限制以阻止高负载服务(例如web服务)影响其他服务
        (例如email服务),或正好相反。在家庭安装中,可以让交互式的传输的优先级高于
        你输出的其他服务(web服务,email等)。

上一页  [1] [2] 

收藏本页到: 365Key | del.icio.us | | 添加到雅虎收藏+
  • 网站帮助 - 广告合作 - 网站地图