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

Posted wywdahai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux性能优化实战-网络性能调优相关的知识,希望对你有一定的参考价值。


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

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

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

# 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连接时,数据包设置了SYN位,服务器就位这个半开的连接创建一个条目,并用一个SYN-ACK数据包进行响应。在正常操作中,远程客户机用一个ACK数据包进行响应,这回使得半开的连接转换为全开的。

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

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

启用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 = 256960
net.core.rmem_max = 256960
net.core.wmem_default = 256960
net.core.wmem_max = 256960
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1


以上是关于linux性能优化实战-网络性能调优的主要内容,如果未能解决你的问题,请参考以下文章

关于linux系统调优这一篇文章就够了

Day785.网络通信优化之通信协议:如何优化RPC网络通信 -Java 性能调优实战

生产级基于SpringCloud微服务架构性能优化实战,建议收藏

linux性能优化实战-磁盘子系统优化

Linux性能优化从入门到实战:16 文件系统篇:磁盘 I/O 指标/工具总结问题定位和调优

Day786.NIO的优化实现原理 -Java 性能调优实战