## linux 优化方案
* docker-compose.yml 需要配置network_mode: "host"
* 增加或修改如下参数
* 参数路径:/etc/sysctl.conf
* vm.swappiness = 0 // 尽可能使用swap分区
* net.ipv4.tcp_max_orphans = 655360 // 系统中最多有多少个TCP 套接字不被关联到任何一个用户文件句柄上
* net.ipv4.tcp_max_syn_backlog = 655360 // 能接受 SYN 同步包的最大客户端数量
* net.core.somaxconn = 32768 // 当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。这个参数表示该队列的最大值
* net.ipv4.ip_local_port_range = 1024 65535 // 对外TCP和UDP连接port的范围
* net.ipv4.tcp_fin_timeout = 30 // FIN-WAIT-2 超时时间
* net.ipv4.tcp_tw_reuse = 1 // 启用重用地址和端口
* net.ipv4.tcp_retries2 = 5 // tcp重连次数
* net.ipv4.tcp_syn_retries = 2 // 重试发送syn包的次数
* net.ipv4.tcp_keepalive_time = 1800 // 首次tcp心跳包在建立链接后多久发送
* net.ipv4.tcp_keepalive_intvl = 30 // tcp心跳间隔(s)
* net.ipv4.tcp_keepalive_probes = 5 // tcp心跳对端无响应后继续发送的探测报文的数量
-
打开
/etc/security/limits.conf
文件,添加以下行来设置用户的 ulimit 值:username soft nofile 65535
username hard nofile 65535 -
其中,
username
是要设置 ulimit 值的用户名,soft
和hard
表示软限制和硬限制。nofile
表示最大打开文件数,这里设置为 65535。可以根据需要设置其他资源的 ulimit 值。 -
如果需要修改系统级别的 ulimit 值,打开
/etc/sysctl.conf
文件,添加以下行:fs.file-max = 65535
其中,
fs.file-max
表示系统级别的最大打开文件数,这里设置为 65535。 -
如果使用的是 systemd 系统,可以在
/etc/systemd/user.conf
和/etc/systemd/system.conf
文件中设置用户和系统级别的 ulimit 值。添加以下行:DefaultLimitNOFILE=65535
其中,
DefaultLimitNOFILE
表示最大打开文件数,这里设置为 65535。 -
重新登录或重新启动系统,让新的 ulimit 值生效。
通过上述步骤,可以设置用户的 ulimit 值。如果需要修改其他资源的 ulimit 值,只需要在第一步中修改对应的配置即可。
6. 设置堆栈的大小
/etc/security/limits.conf文件设置
user1 soft stack 2048(kB为单位)
7. 开启服务器bbr加速
Linux系统开启服务器BBR加速教程_linux bbr-CSDN博客
8. 修改tcp的接收和发送的缓冲队列长度
1. 修改/sys/module/tcp_cubic/parameters/tcp_wmem参数来调整发送窗口大小。
2. 修改/sys/module/tcp_cubic/parameters/tcp_rmem参数来调整接收窗口大小。
这个值应该就是网络中滑动窗口的大小的最大值
https://blog.51cto.com/u_15138962/10236777
9. SO_REUSEPORT 可以做到使得linux自己可进行传入数据req路由到后面同一个port绑定的不同的子程序中。其实就是内核做了reactor模式进行流量分发的工作。