linux性能优化实战-网络性能调优


转自:https://blog.csdn.net/twypx/article/details/80290759 linux

大多数Linux发行版都定义了适当的缓冲区和其余TCP参数,能够经过修改这些参数来分配更多的内存,从而改进网络性能。设置内核参数的方法是经过proc接口,也就是经过读写/proc中的值。幸运的是,sysctl能够读取/etc/sysctl.conf中的值并根据须要填充/proc,这样就可以更轻松地管理这些参数。服务器

下面展现了在互联网服务器上应用于Internet服务器的一些比较激进的网络设置。cookie

# Use TCP syncookies when needed
net.ipv4.tcp_syncookies = 1
# Enable TCP window scaling
net.ipv4.tcp_window_scaling = 1
# Increase TCP max buffer size
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# Increase linux autotuning TCP buffer limits
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65535 16777216
# Increase number of ports available
net.ipv4.ip_local_port_range = 1024 65000

将这些设置添加到/etc/sysctl.conf的现有内容中。网络

第一个设置启用TCP SYN cookie。tcp

当从客户机发来新的TCP链接时,数据包设置了SYN位,服务器就位这个半开的链接建立一个条目,并用一个SYN-ACK数据包进行响应。在正常操做中,远程客户机用一个ACK数据包进行响应,这回使得半开的链接转换为全开的。性能

有一种称为SYN泛滥(SYN flood)的网络攻击,它使ACK数据包没法返回,致使服务器用光内存空间,没法处理到来的链接。SYN cookie特性能够识别出这种状况,并使用一种优雅的方法保留队列中的空间,大多数系统都默认启用这个特性,可是确保配置这个特性更可靠。.net

第二个设置启用TCP窗口伸缩blog

启用TCP窗口伸缩可使客户机可以以更高的速度下载数据。TCP容许在未从远程端收到确认的状况下发送多个数据包,默认设置是最多64KB,在与延迟比较大的远程客户机进行通讯时这个设置可能不够,窗口伸缩会在头中启用更多的位,从而增长窗口大小。接口

后面四个配置项增长TCP发送和接收缓冲区队列

这使应用程序能够更快地丢掉它的数据,从而为另外一个请求服务,还能够强化远程客户机在服务器繁忙时发送数据的能力。

最后一个配置项增长可用的本地端口数量

这样就增长了能够同时服务的最大链接数量。

在下一次引导系统时,或者下一次运行sysctl -p /etc/sysctl.conf时,这些设置就会生效。

TCP/IP子系统的调优
全部的TCP/IP调优参数都位于/proc/sys/net目录,例以下面是最重要的一些调优参数:

# 最大的TCP数据接收缓冲
/proc/sys/net/core/rmem_max
# 最大的TCP数据发送缓冲
/proc/sys/net/core/wmem_max
# 时间戳在TCP的包头增长12个字节
/proc/sys/net/ipv4/tcp_timestamps
# 有选择的应答
/proc/sys/net/ipv4/tcp_sack
# 支持更大的TCP窗口,若是TCP窗口最大超过65535,必须设置该数值为1
/proc/sys/net/ipv4/tcp_window_scaling
# 默认的接收窗口大小
rmem_default
# 接收窗口的最大大小
rmem_max
# 默认的发送窗口大小
wmem_default
# 发送窗口的最大大小
wmem_max

/proc目录下的全部内容都是临时性的,因此重启系统后任务修改都会丢失

建议在系统启动时自动修改TCP/IP参数,将下面代码增长到/etc/rc.local文件中,而后保存文件,系统从新引导的时候回自动修改下面TCP/IP参数:

echo 256960 > /proc/sys/net/core/rmem_default
echo 256960 > /proc/sys/net/core/rmem_max
echo 256960 > /proc/sys/net/core/wmem_default
echo 256960 > /proc/sys/net/core/wmem_max
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
echo 1 > /proc/sys/net/ipv4/tcp_sack
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling

TCP/IP参数都是自解释的,TCP窗口大小设置为256960,禁止TCP的时间戳(取消在每一个数据包的头中增长12字节),支持更大的TCP窗口和TCP有选择的应答。

上面数值的设定是根据互联网链接和最大带宽/延迟率来决定的。

另一个方法:使用/etc/sysctl.conf在系统启动时将参数设置成须要设置的值。

net.core.rmem_default = 256960net.core.rmem_max = 256960net.core.wmem_default = 256960net.core.wmem_max = 256960net.ipv4.tcp_timestamps = 0net.ipv4.tcp_sack = 1net.ipv4.tcp_window_scaling = 1

相关文章
相关标签/搜索