1、Disabling daemons (关闭 daemons)
2、Shutting down the GUI (关闭GUI)
3、Changing kernel parameters (改变内核参数)
4、Kernel parameters (内核参数)
5、Tuning the processor subsystem(处理器子系统调优)
6、Tuning the memory subsystem (内存子系统调优)
7、Tuning the file system(文件系统子系统调优)
8、Tuning the network subsystem(网络子系统调优)
1 关闭daemons
有些运行在服务器中的daemons (后台服务),并不是完全必要的。关闭这些daemons可释放更多的内存、减少启动时间并减少CPU处理的进程数。减少daemons数量的同时也增强了服务器的安全性。缺省情况下,多数服务器都可以安全地停掉几个daemons。
Table 10-1列出了Red Hat Enterprise Linux AS下的可调整进程.
Table 10-2列出了SUSE LINUX Enterprise Server下的可调整进程
注意:关闭xfs daemon将导致不能启动X,因此只有在不需要启动GUI图形的时候才可以关闭xfs daemon。使用startx命令前,开启xfs daemon,恢复正常启动X。
可以根据需要停止某个进程,如要停止sendmail 进程,输入如下命令:
Red Hat:
/sbin/service sendmail stop
SUSE LINUX:
/etc/init.d/sendmail stop
也可以配置在下次启动的时候不自动启动某个进程,还是sendmail:
Red Hat:
/sbin/chkconfig sendmail off
SUSE LINUX:
/sbin/chkconfig -s sendmail off
除此之外,LINUX还提供了图形方式下的进程管理功能。对于Red Hat,启动GUI,使用如下命令:
/usr/bin/redhat-config-services 或者鼠标点击
Main Menu ->
System Settings ->
Server Settings ->
Services.
提示:并非所有的daemons都会显示在该配置界面,如要看到全部的daemons,使用如下命令:
/sbin/chkconfig –list
对于SUSE LINUX,图形界面是YaST2, 可用如下命令来启动
/sbin/yast2 runlevel 或者如Figure 10-2所示用鼠标点击
Browse: YaST/ −>
YaST modules −>
System −>
Runlevel editor
2 关闭GUI
只要有可能,就不要在Linux server上启动GUI图形,通常在Linux server上,没有必要启动GUI。,所有的管理任务均可在命令行方式下完成、或者通过重定向X和Web浏览器界面。有几个可用的基于Web的工具(例如webmin, Linuxconf, 和SWAT).
需要的时候启动GUI,用完马上关闭GUI。多数情况,服务器运行在runlevel 3,即在机器启动的时候不进入GUI。命令行方式下,执行
startx 来启动Xserver.
1. 查看runlevel的命令:runlevel
会显示出上次和当前的runlevel (如N 5 表示没有上次的runlevel (N) ,当前的runlevel是5).
2. 在不同的runlevels之间切换,使用命令
init
如切换到run level 3,键入命令init 3
下边是对Linux中不同runlevels的简要描述
– 0 – Halt 停机(不要将0设置为缺省,否则服务器启动后就会马上关闭)
– 1 - Single user mode 单用户模式
– 2 - Multi-user 不带NFS的多用户模式 (如果没有网络,相当与3)
– 3 - Full multi-user mode 完全多用户模式
– 4 – Unused 未使用
– 5 - X11
– 6 – Reboot 重启(不要将6设置为缺省,否则服务器会不断地重启)
修改文件/etc/inittab 来设置机器启动的runlevel,如Figure 10-3。
对于SUSE LINUX Enterprise Server, 执行
YaST runlevel 命令改变缺省runlevel值.
如图Figure 10-2。
缺省情况下,保存了6个控制台:F1……F6。为节省内存,可以减少为3个。使用mingetty ttyx命令来实现,如图Figure 10-3
提示:即便是已经关闭了GUI,依然可以远程连接并启动GUI,可以使用
ssh-x
3 改变内核参数
Linux内核是操作系统的核心,对所有的Linux发行版本是通用的。内核参数可以改变,在命令行下执行
sysctl 命令。
提示:缺省情况下,LINUX内核包括不必重启就可以使用
sysctl命令的必要的模块。尽管如此,如果你在安装系统的时候选择移除该功能,那么你只有重新启动LINUX,才可以使得改变生效。
SUSE LINUX 提供了图形界面下的修改方式。使用如下命令来启动powertweak工具:
/sbin/yast powertweak
使用如下命令启动基于字符的管理菜单:
/sbin/yast2 powertweak
Red Hat也提供了图形界面下更改sysctl参数的方式:
/usr/bin/redhat-config-proc
如图Figure 10-5
Parameter storage locations
内核参数保存在/proc(特别是/proc/sys),提供了内核、处理器、内存、网络及其他组件的相关参数。每个执行的进程都有一个以相应PID命名的目录。Figure 10-3列出了一些包括内核信息的文件。
4 内核的参数
Table 10-5 列出了Red Hat V2.4与性能关系密切的一些内核参数。
5 处理器子系统调优
处理器对于应用和数据库服务器来讲是最重要的硬件子系统之一。然而在这些系统中,CPU经常是性能的瓶颈。
在配有Xeon处理器的高端服务器中,你可以启用或者关闭Hyper-Threading(超线程功能)。Hyper-Threading在操作系统里将一颗处理器虚拟化为两颗使用。Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server都支持该功能,从而可以使处理器在同一时刻执行两个线程或者进程。对于支持Hyper-Threading的操作系统和软件来说,不需要增加CPU时钟频率即可使性能得到明显的改进。例如,在4路的服务器上起用Hyper-Threading功能并使用性能监测工具(如top)来检测,可以看到8颗处理器。如图Figure 10-6
提示,对于Hyper-Threading:
_ 基于SMP内核的LINUX才可以支持Hyper-Threading
_ 安装的CPU数量越多,从Hyper-Threading获得的性能上的提高就越少。可获得的性能提高大约为:
– 2颗物理CPU: 15-25%
– – 4颗物理CPU: 1-13%
– – 8颗物理CPU: 0-5%
– 如需更多的关于Hyper-Threading信息,可浏览:
http://www.intel.com/business/bss/products/hyperthreading/server/
EM64T是Intel IA-32处理器的64-bit扩展。意思是,处理器能够支持更多的内存并支持64-bit应用同时完全兼容现存的32-bit应用。Red Hat Enterprise Linux 3 Update 2 和 SUSE LINUX Enterprise Server 9支持这种新的处理器。如需更多的EM64T信息,可浏览:
http://www.intel.com/technology/64bitextensions/
选择正确的内核
Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server都包括有若干个内核包,如Table 10-6所列。选择合适的内核对性能非常重要。
6 内存子系统的调优
内存子系统的调优不是很容易,需要不停地监测来保证内存的改变不会对服务器的其他子系统造成负面影响。如果要改变虚拟内存参数(在/proc/sys/vm),建议您每次只改变一个参数然后监测效果。对与虚拟内存的调整包括以下几个项目:
_ 配置Linux内核如何更新dirty buffers到磁盘。磁盘缓冲区用于暂存磁盘的数据。相对于内存来讲,磁盘缓冲区的速度很慢。因此,如果服务器使用这类内存,性能会成问题。当缓冲区内的数据完全dirty,使用:sysctl -w vm.bdflush="30 500 0 0 500 3000 60 20 0"
vm.bdflush有9个参数,但是建议您只改变其中的3个:
1
nfract, 为排队写入磁盘前,bdflush daemon允许的缓冲区最大百分比
2
ndirty, 为bdflush即刻写的最大缓冲区的值。如果这个值很大,bdflush需要更多的时间完成磁盘的数据更新。
7
nfract_sync, 发生同步前,缓冲区变dirty的最大百分比。
配置kswapd daemon,指定Linux的内存交换页数量
sysctl -w vm.kswapd="1024 32 64"
三个参数的描述如下:
– tries_base 相当于内核每次所交换的“页”的数量的四倍。对于有很多交换信息的系统,增加这个值可以改进性能。
– tries_min 是每次kswapd swaps出去的pages的最小数量。
– swap_cluster 是kswapd 即刻写如的pages数量。数值小,会提高磁盘I/O的性能;数值大可能也会对请求队列产生负面影响。
如果要对这些参数进行改动,请使用工具
vmstat检查对性能的影响。其它可以改进性能的虚拟内存参数为:
_ buffermem
_ freepages
_ overcommit_memory
_ page-cluster
_ pagecache
_ pagetable_cache
7 文件系统的调优
总体而言,所有数据都要从磁盘获取并都要保存到磁盘。磁盘访问速度通常以毫秒来计算,比其它组件要慢上千倍(如内存、PCI操作是以纳秒或者微秒来计算的)。Linux文件系统定义了数据存储和访问的方式。
Linux可用的文件系统有多种,它们的性能和可扩展性各不相同。除了保存和管理磁盘数据,文件系统还负责保证数据的完整性。新版的Linux缺省安装已经包括日志文件系统(journaling file systems),日志文件系统可防止系统崩溃时导致的数据不一致问题。对文件系统元数据(metadata)的更改都被保存在一份单独的日志里,当发生系统崩溃时可以根据日志正确地恢复数据。除此之外,日志使系统重新启动时不必进行文件系统的检查,从而缩短了恢复时间。
同其他方面的计算一样,性能和完整性是相互平衡的。然而,因Linux服务器多用于企业环境及数据中心,因此要求具备更高的可用性。
这里,我们将介绍Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server的文件系统及其性能调优。
7.1 安装Linux前,硬件方面的考虑
当前Linux的发行版本对CPU、硬盘和内存方面均有明确的安装要求。然而,对于如何设置磁盘子系统的说明远远不够。由于Linux服务器被广泛的应用于各种环境,数据中心的服务器整合,我们首先要回答的问题就是:“该服务器的功能是什么?”
磁盘子系统可能是整个服务器系统性能的主要方面。了解服务器的功能是判断I/O子系统对性能产生多大影响的关键。
下面几种服务器的磁盘I/O性能是非常重要的:
_ 文件和打印服务器要求在用户和磁盘子系统之间快速地移动数据。因文件服务器的功能是向客户端发送数据,所以要快速读取所有的数据。
_ 数据库服务器的最终目标是从磁盘上的数据仓库里查找和获取数据。即便有足够的内存,多数数据库服务器依然需要大量的磁盘I/O将数据读入内存和更新磁盘数据。
下面几种服务器的磁盘I/O性能不是最重要的:
_ 邮件服务器用于电子邮件的存储和转发,通常产生较大的通信量。对这类服务器来讲,网络性能更为重要。
_ Web服务器用于发布静态和动态的Web页面,网络和内存子系统的性能非常重要。
磁盘技术的选择
除了理解服务器功能,还要了解磁盘容量的部署。下面是当前几种可选的磁盘技术及其容量、特点:
技术 |
花费 |
功能 |
容量及其限制 |
EIDE |
最低 |
直连、本地存储 低端服务器,如x305 |
每控制器最多2块盘 |
SCSI |
低 |
直连、本地存储 中、高端服务器, 如x346、x365 |
已经使用了10年的标准; 对数据线长度、传输带宽和磁盘数量均有限制 单个通道的并发访问的数量也有所限制,限制了群集功能 |
SATA |
低 |
中端数据存储应用 |
2002年开始出现,是EIDE技术的延续; 点对点协议,每个驱动器都有一个独立的通道,增强扩展能力; 连续的磁盘访问性能可与SCSI相比; 支持RAID |
iSCSI |
较低 |
中端数据存储, 如Web/文件服务器 |
定位于中端存储和远程启动; 节省基础架构的开销 提供了TCP/IP/Ethernet的灵活性和可靠性; TCP/IP的高延迟影响性能; 目前Red Hat Enterprise Linux还不支持 |
Fibre Channel |
高 |
高端的企业存储, 如数据库服务器 |
低延迟、高吞吐量,长传输距离可达10公里 2 Gbps传输速率;路径冗余功能提高可靠性;一个光纤环路支持127个设备,共享带宽,实现大规模群集 |
磁盘的数量
磁盘的数量多少会影响到系统性能。对磁盘容量的需求通常是考虑磁盘数量的唯一因素,而忽视了吞吐量的因素。好的性能是依赖于提供I/O读写的磁头数量。可通过RAID技术来实现,包括软RAID和硬件RAID。许多型号的xSeries服务器提供了硬件RAID支持,Linux 还提供了软RAID功能。2.4 Linux kernel的软RAID是通过md设备驱动实现的,支持EIDE或SCSI硬盘。支持的RAID级别为RAID-0, RAID-1,和RAID-5,可以在初始安装配置或者用mdadm工具配置。Table 10-8列出了可选的IBMRAID控制器:
提示:通常增加硬盘数量是提高磁盘性能的一个最有效方法。
更多的内容,请参考如下文档的第121页Chapter 7, “Disk subsystem”
_ IBM TotalStorage Disk Solutions for xSeries, SG24-6874-00
http://www.redbooks.ibm.com/abstracts/sg246874.html
_ IBM Eserver xSeries ServeRAID Technology
http://www.pc.ibm.com/ww/eserver/xseries/scsi_raid.html
7.2 Ext3: Red Hat的缺省文件系统
从Red Hat 7.2开始,缺省文件系统为Ext3。相对于Ext2,增加了日志。其主要特点为:
_ Availability(可用性):Ext3提供数据的写一致功能。即意外宕机情况下,不需要检查数据的一致性,使系统恢复时间从几小时缩短为几秒钟。
_ Data integrity(数据完整性):通过mount命令定义日志方式:data=journal,所有的数据,包括文件数据和元数据,都被定义为日志型。
_ Speed(速度):通过定义日志方式:data=writeback, 可以选择获得数据完整性还是写速度的优势来满足不同的业务需求。
_ Flexibility(灵活性):从Ext2升级到Ext3非常简单,且不需要重新格式化硬盘。使用命令tune2fs 并编辑文件/etc/fstab,便可完成升级。注意,Ext3可被mount为不带日志属性的ext2文件系统。
另外,许多第三方厂家兼容Ext3 file systems,如PartitionMagic。
7.3 ReiserFS: SUSE LINUX的缺省文件系统
从SUSE LINUX 7.1开始,缺省安装的文件系统即为由Hans Reiser开发的ResierFS。在其设计之初便包括如下性能方面的考虑 From its initial design, key performance
aspects have included:
_ 日志文件系统(Journaling)的设计提高了可靠性和恢复速度。
_ 使用平衡树数据结构可以同时存储内容数据和安全元数据,使其获得更快的访问速度。
_ 有效地利用磁盘空间,与其他文件系统不同,ResierFS不依赖于数据块的大小。Efficient use of disk space because, unlike other file systems, this file system
does not rely on block sizes.
目前SUSE LINUX Enterprise Server 8的ReiserFS为V3.6,下一代文件系统是Reiser4。Reiser4提供的是不间断的文件系统,通过实现“atomic”文件系统避免系统崩溃,保证完成I/O操作;使用新的访问算法来获取2到5倍的性能提高。
提示: Red Hat Enterprise Linux AS不支持ReiserFS
7.4 通过Linux kernel对文件系统调优
缺省文件系统的设置或许适合大多数应用环境。尽管如此,我们还是提供了如下几个提高磁盘性能的方法:
访问时间更新
linux文件系统当文件被访问,创建,更新的时候会保留纪录。默认的,当文件读写操作的时候,系统会更新last-time-read属性。因为写操作是比较耗费资源的操作,减少不必要的i/o可以整体上提高磁盘性能。
在挂接文件系统的时候,加入noatime参数可以禁止inode节点访问时间的修改。如果文件更新时间对于特定的应用不是很重要的话,比如web服务,就可以把noatime参数加入/etc/fstab文件中
比如:
/dev/sdb1 /mountlocation ext3 defaults,noatime 1 2
推荐利用单独的分区作为挂接点并打开noatime开关
Tuning the elevator algorithm(调整阶梯算法)
磁盘I/O 阶梯算法产生于V2.4 kernel。它是通过控制I/O请求获得服务前在队列中等待时间,来调整块I/O的运算法则。
这是由调整阶梯算法的读写值实现的。通过增加延迟(更大的读、写值),I/O请求在队列中等待更长时间,给I/O scheduler更好地完成I/O操作,改进性能。
对应用于大量磁盘I/O的Linux服务器,要在吞吐量和延迟方面找到一个合理的平衡点。Linux文件系统使用块设备,因此改进块读写的频率可以改进文件系统的性能。一个准则是,小缓存、平横的长延迟读写有利于大量磁盘I/O的Linux服务器。阶梯算法的调整是一个交互的过程,首先要获得基准性能曲线,然后改动设置,观察效果。Example 10-1给出了如何用/sbin/elvtune命令显示当前设置以及如何改动读写队列的数值。
提示:Red Hat建议您将读延迟(-r)调整为写延迟(-w)的一半。
做过改动之后,确保/sbin/elvtune call被加到/etc/rc.d/rc.local (Red Hat)或者/etc/init.d/boot.local (SUSE LINUX)中,使设置在系统重新启动后生效。
redhat推荐调整升降算法来让读延迟是写延迟的一半
注意,2.6核心的linux指出elvtune命令已经作废,取而代之的是调整/sys/block结构
选择Ext3文件系统的日志模式
Ext3文件系统可选三种日志模式,使用mount命令来完成:
_ data=journal
文件数据和元数据均设置为日志方式,性能开销比较大
_ data=ordered (缺省设置)
顺序写入,先写文件数据,再写元数据
_ data=writeback
提供最快的访问速度,但是牺牲了数据的一致性。元数据仍然被记录到日志,从而确保元数据的完整。文件数据会在系统崩溃之后恢复到原先的状态。
三种方法改变日志模式:
_ 使用mount 命令:
mount -o data=writeback /dev/sdb1 /mnt/mountpoint 这里/dev/sdb1 是挂载的文件系统
_ 在/etc/fstab文件的选项中:
/dev/sdb1 /testfs ext3 defaults,journal=writeback 0 0
_ 更改root分区的data=ordered,更改上述/etc/fstab 文件,执行mkinitrd命令来扫描/etc/fstab 文件并创建新的印象文件。升级grub或lilo指向新的印象文件。更多有关Ext3的介绍,请参考:
http://www.redhat.com/support/wpapers/redhat/ext3/
Tuning ReiserFS (调整ReiserFS)
ReiserFS的优势之一是支持大量的小文件。取代传统Linux文件系统的块结构,ReiserFS使用树型结构,保存小文件的全部内容和大文件的结尾。ReiserFS不使用固定的块大小,避免出现碎片而浪费磁盘空间。
挂载ReiserFS 文件系统时,有一个选项可以改进系统性能,但是会消耗更多的磁盘空间。使用notail来关闭“tail packing”选项,具体方法如下:
Setting bdflush
通过调整虚拟内存子系统也可以改进文件系统性能。Bdflush内核进程保证dirty buffers (任何当前被修改的只存在于易失性内存的数据)与磁盘一致。修改/proc/sys/vm/bdflush变量,来改变写入磁盘速率,避免磁盘竞争问题。对/proc下的任何修改即刻生效,但是重新启动后会恢复到原来状态。在/etc/rc.d/rc.local文件中加入echo命令使所做的修改永久生效。
1. 对于2.4 Linux kernels,在/proc/sys/vm/bdflush包括九个变量:nfract:dirty buffers在buffer cache中的最大百分比。Nfract值越大,写入磁盘的延迟越长。当内存不足时,大量的I/O操作被处理。为使磁盘I/O操作均匀分布,保持较低的值。
2. Ndirty:bdflush process可以一次写入磁盘的最大dirty buffers值。该值过大会导致大量I/O请求,过小会在bdflush daemon执行不够频繁的时候导致内存不足。
3. dummy2 未使用
4. dummy3 未使用
5. interval 唤醒kupdate的最低速率。缺省是5秒,最小0秒,最大600秒。
6. age_buffer操作系统将buffer cache写入磁盘前等待的最长时间。缺省30秒,最小1秒,最大6000秒。
7. nfract_sync 激活bdflush同步的dirty buffers百分比,缺省为60%.
8. nfract_stop 停止bdflush的dirty buffers百分比,却省为20%.
9. dummy5 未使用
下面是更改bdflush变量的示例:
SCSI磁盘的标签命令队列Tagged command queuing (TCQ),产生于SCSI-2标准,是一种将到达SCSI驱动器的指令序列进行打标签和重新排序的方法。对于繁重、随机访问的I/O负荷,这种方法通过对I/O请求的重排序,使驱动器磁头位置最优化,改进I/O性能。
一些IBM xSeries服务器集成了Adaptec AIC-7xxx SCSI控制器。执行命令:cat /proc/scsi/aic7xxx/0来检查当前TCQ的设置,不必重新编译内核。可以在/etc/modules.conf中添加如下两行内容,指定参数aic7xxx=global_tag_depth:xx
Block sizes块大小
数据块大小是对磁盘读写的最小单位,直接影响服务器性能。如果服务器处理的多为小文件,那么较小的数据块尺寸会更有效。反之,如果服务器处理的多为大文件,大的数据尺寸块会提高系统性能。如果要改变数据块的大小必须重新格式化磁盘。做了RAID的磁盘,stripe size 就是数据块的容量(光纤盘采用segment)。根据应用的不同合理选择正确的块大小,通常的原则是顺序读写应用宜使用大的块容量,象数据库这样的随机读写操作使用等同于记录大小的块容量更合适。
不同系统版本,可选的块大小不同:
_ Red Hat Enterprise Linux AS with Ext3 可选的块大小为1 KB, 2 KB和4 KB
_ SUSE LINUX Enterprise Server with ReiserFS可选的块大小为4 KB
分区设置的原则
Linux缺省安装创建三个分区:
_ 一个swap分区(自动设定为2倍内存大小但不超过2 GB)
_ 一个小的boot分区:/boot (例如100 MB)
_ 其它空间给根分区 /
关于Linux磁盘分区的优化存在许多的争论。如果只有一个根分区的话,对于将来要增加新分区时会比较麻烦。而分区太多对文件系统的管理又会变的复杂。Linux安装过程中,允许创建多个分区。
创建多个磁盘分区的好处:
_文件系统出色的颗粒度属性使安全性得到改进。例如,允许所有用户和进程容易地访问/var和/tmp分区,并防止恶意访问。通过将这些分区分布到不同的磁盘,可在不影响系统正常运行的情况下对一些分区进行重建和恢复。
_ 某块磁盘故障导致的数据丢失不影响其他磁盘的数据,改进数据完整性。
_ 全新的安装或升级不影响其它分区。
_ 更有效的备份过程
设计分区时要考虑到备份工具,要了解备份工具是以分区为边界或是以更细颗粒度级别,如文件系统为边界。下表列出了要考虑与根分区分开的五个分区,这些分区的划分可以改进性能和灵活性。
要更深层了解Linux文件系统和分区,访问如下关于文件系统层次的网页
http://www.pathname.com/fhs
7.5 交换分区
当物理内存被全部占用,而系统又需要更多的内存时,交换设备发挥作用。这时,系统会将内存中很少使用的数据交换到磁盘的交换分区,释放物理内存。最初的交换分区在安装系统的过程建立,原则上是两倍的物理内存大小。Linux kernels 2.4 支持每分区24GB的交换分区,32-bit系统理论上支持最大8T分区大小。交换分区存在于独立的磁盘。
对于安装好的系统,增加内存时,需要设置更多的交换空间。两种方法可以实现:
·创建一个新的分区作为交换分区。如果没有空闲空间创建新的分区,可以创建一个交换文件。
·如有选择,最好是创建一个交换分区。
从磁盘I/O到交换分区绕过了文件系统,所有的性能开销都在写文件上,因此使提高了性能。
另外一种改进性能的方法是创建多个交换空间,实现并行读写磁盘。增加了交换分区或交换文件后,/etc/fstab文件包含如Example 10-5所示内容:
通常情况下,Linux首先使用/dev/sda2交换分区,然后是/dev/sdb2,依次类推,直到获得足够的交换空间。也就是说,当没有更大空间需求的话,只有/dev/sda2被使用。将数据分散到更多的交换分区可以改进性能,这是因为所有的读写请求是被并行处理的。如果按照Example 10-6改变文件配置,可以给前三个分区赋予更高的优先级。
交换分区是从最高优先级开始使用的(32767最高,0为最低),给前三个分区赋予相同的优先级使数据被写到三个磁盘中;而不是写满一个再写下一个。三个分区并行使用,以提高性能。当前三个分区用满之后,第四个分区开始启用。也可以将所有分区设置为同一个优先级,但是假如这里有一块磁盘的速度比其它磁盘慢的话,性能就会下降。通常的做法是把交换分区放在最快的磁盘中。
提示:交换分区不是物理内存的替代品,它存在于物理磁盘中,性能远远低于内存访问速度。
8 网络子系统的调优
操作系统安装完毕,就要对网络子系统进行调优。对其它子系统的影响:影响CPU利用率,尤其在有大量TCP连接、块尺寸又非常小时,内存的使用会明显增加。
如何预防性能下降
如下的sysctl命令用于改变安全设置,但是它也可以防止网络性能的下降。这些命令被设置为缺省值。
·关闭如下参数可以防止黑客对服务器IP地址的攻击
·开启TCP SYN cookies,保护服务器避免受syn-flood攻击,包括服务取决denial-of-service (DoS) 或者分布式服务拒绝distributed denial-of-service (DDoS) (仅适用Red Hat Enterprise Linux AS)
·以下命令使服务器忽略来自被列入网关的服务器的重定向。因重定向可以被用来进行攻击,所以我们只接受有可靠来源的重定向。
另外,你可以配置接受或拒绝任何ICMP重定向。ICMP重定向是路由器传输路由信息的机制。比如,当网关接收到来自所接网络主机的Internet数据报时,网关可以发送重定向信息到一台主机。网关检查路由表获得下一个网关的地址,第二个网关将数据报路由到目标网络.关闭这些重定向得命令如下:
·如果这个服务器不是一台路由器,那么它不会发送重定向,所以可以关闭该功能:
·配置服务器拒绝接受广播风暴或者smurf 攻击attacks:
·忽略所有icmp包或者pings:
·有些路由器针对广播祯发送无效的回应,每个都产生警告并在内核产生日志.这些回应可以被忽略:
针对TCP和UDP的调优
下边的命令用来对连接数量非常大的服务器进行调优.
·对于同时支持很多连接的服务器,新的连接可以重新使用TIME-WAIT套接字. 这对于Web服务器非常有效:
如果你使用该命令,还要启动TIME-WAIT 套接字状态的快速循环功能:
图Figure 10-7显示出将这些功能启用,连接数量明显降低.因为每个TCP传输都包含远程客户端的协议信息缓存,所以有利于提高性能.缓存中存放round-trip时间、最大segment大小、拥塞窗口的信息。
·参数 tcp_fin_timeout 是套接字关闭时,保持 FIN-WAIT-2状态的时间。一个 TCP连接以 three-segment SYN序列开始 ,以 three-segment FIN序列结束 .均不保留数据 .通过改变 tcp_fin_timeout的值 , 从 FIN序列到内存可以空闲出来处理新连接的时间缩短了 ,使性能得到改进 .改变这个值的前要经过认真的监测 ,避免因为死套接字造成内存溢出 .
·服务器的一个问题是 ,同一时刻的大量 TCP连接里有很多的连接被打开但是没有使用 . TCP的 keepalive功能检测到这些连接 ,缺省情况下 ,在 2小时之后丢掉 . 2个小时的可能导致内存过度使用 ,降低性能 .因此改成 1800秒 (30分钟 )是个更好的选择 :
·对于所有协议的队列 ,设置最大系统发送缓存 (wmem) 和接收缓存 (rmem)到 8MB
这些设置指定了创建 TCP套接字时为其分配的内存容量 . 另外 ,使用如下命令发送和接收缓存 .该命令设定了三个值 :最小值、初始值和最大值:
第三个值必须小于或等于 wmem_max和 rmem_max。
· (SUSE LINUX Enterprise Server适用 ) 通过保留路径验证来源数据包。缺省情况下,路由器转发所有的数据包,即便是明显的异常网络流量。通过启动和是的过滤功能,丢掉这些数据包:
·当服务器负载繁重或者是有很多客户端都是超长延时的连接故障,可能会导致 half-open连接数量的增加。这对于 Web服务器很来讲很平常 ,尤其有很多拨号客户时 .这些 half-open连接保存在
backlog connections 队列中 .将这个值最少设置为 4096 (缺省为 1024). 即便是服务器不接收这类连接 ,设置这个值还能防止受到 denial-of-service (syn-flood)的攻击 .
·设置 ipfrag参数 ,尤其是 NFS和 Samba服务器。这里 ,我们可以设置用于重新组合 IP碎片的最大、最小内存。当 ipfrag_high_thresh值被指派,碎片会被丢弃直到达到 ipfrag_low_thres值。
当 TCP数据包传输发生错误时,开始碎片整理。有效的数据包保留在内存,同时损坏的数据包被转发。例如,设置可用内存范围从 256 MB到 384 MB: