• 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


  • 相关阅读:
    关于virtual、非virtual继承函数的调用
    关于文件操作的文件格式与打开方式
    C++ 文件读写操作
    C++语法题
    检测java string变量是否含有中文
    常用知识库
    WMS仓储管理系统
    运输管理
    ipconfig/flushdns 清除系统DNS缓存
    cmd查看域名账号相关的命令
  • 原文地址:https://www.cnblogs.com/yanwei-wang/p/10739821.html
Copyright © 2020-2023  润新知