2009年4月6日星期一

调整内核参数,改善网络体验

通常,Linux内核和基于其的各种发行版,对于网络方面的设置都只提供了相当保守的参数,事实上,我们可以通过/proc文件系统或者使用sysctl程序来调节这些参数。后者要更加方便一些,因为这个工具是读取和改写
/etc/sysctl.conf中的内容,这样你在重新启动后,所有设置都不会丢失。

下面就是可能提升你网络性能的参数摘录:


net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_syncookies = 1
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

注意,并不是说让你去用这些东西来覆盖文件中的内容,而是去补充它们,因为本来是不存在这些参数设置的。下面,就来介绍一下这些参数的意思。

第一个参数是用于打开TCP窗口的调节的,它允许客户端通过使能TCP包中额外的bit位来增加窗口长度,以达到更高的速度进行数据下载的效果。

第二个参数是用于打开TCP SYN
cookies功能,该功能可以防止部分SYN洪水攻击,以免不断的链接请求会极大消耗服务器的资源,实际上就是降低syn的重试次数。

接下来的四个选项则是增加TCP的发送和接受缓冲。这样,应用程序能够更快传输数据,同时也就有更多的时间来处理其他请求。这些参数同时还提升了当前比较忙碌的客户端发送数据到服务器端的能力。

在把这些参数选项添加到/etc/sysctl.conf后,你需要通过命令

# sysctl -p /etc/sysctl.conf

来让它们生效,不用重启机器哦。想知道它们是不是真的起作用了呢?用命令

# sysctl -a

它会列出所有选项以及相关值,sysctl.conf文件允许你配置并保存新的默认值,你从sysctl
-a的结果中看见的值就是新的当前默认有效的值。如果你觉得太多了,看得眼花,可以通过命令

# sysctl -q net.ipv4.tcp_window_scaling

来查看某个特定的选项。当然,你也可以通过命令

# sysctl -w net.ipv4.tcp_window_scaling=1

来临时设置某个选项的值,但别忘了是临时哦,一旦重新启动设置就会丢失。所以一般这个命令是用于测试的。