linux优化--tcp优化

文件描述符:内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。

由于每台机器的文件描述符都是处于默认的1024的标准值,对于高并发的系统来说,很容易达到瓶颈,因此我们需要重定文件描述符数量

 /etc/security/limits.conf 限制着用户可以使用的最大文件数,最大线程,最大内存等资源使用量。

hard和soft的区别: soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错,一般情况下都是设为同一个值。

1
2
3
4
5
vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

tcp协议栈 优化

关于我们对于系统tcp协议栈的参数设置  调整内核参数

vi /etc/sysctl.conf
net.ipv4.tcp_fin_timeout=10

net.ipv4.tcp_syncookies=1

#开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接
net.ipv4.tcp_tw_reuse=1

#启用timewait 快速回收
net.ipv4.tcp_tw_recycle=1

net.ipv4.ip_local_port_range=1024 65000
net.ipv4.tcp_max_syn_backlog=8192
net.ipv4.tcp_max_tw_buckets=5000

net.ipv4.tcp_timestamps = 0

#每300秒 探测一次tcp连接是否空闲,一共探测2次,每次间隔15秒
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 2

net.ipv4.tcp_keepalive_time = 300
然后执行 /sbin/sysctl -p 让参数生效

1. fs.file-max
最大可以打开的文件描述符数量,注意是整个系统。

net.ipv4.tcp_max_syn_backlog
Tcp syn队列的最大长度,在进行系统调用connect时会发生Tcp的三次握手,server内核会为Tcp维护两个队列,Syn队列和Accept队列,Syn队列是指存放完成第一次握手的连接,Accept队列是存放完成整个Tcp三次握手的连接,修改net.ipv4.tcp_max_syn_backlog使之增大可以接受更多的网络连接。   此参数过大可能遭遇到Syn flood攻击

net.ipv4.tcp_syncookies
修改此参数可以有效的防范上面所说的syn flood攻击

原理:在Tcp服务器收到Tcp Syn包并返回Tcp Syn+ack包时,不专门分配一个数据区,而是根据这个Syn包计算出一个cookie值。在收到Tcp ack包时,Tcp服务器在根据那个cookie值检查这个Tcp ack包的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接。 默认为0,1表示开启

net.ipv4.tcp_keepalive_time
Tcp keepalive心跳包机制,用于检测连接是否已断开,我们可以修改默认时间来间断心跳包发送的频率

net.ipv4.tcp_tw_reuse
大量处于time_wait状态是很浪费资源的,它们占用server的描述符等。

修改此参数,允许重用处于time_wait的socket。默认为0,1表示开启

net.ipv4.tcp_tw_recycle
也是针对time_wait状态的,该参数表示快速回收处于time_wait的socket。默认为0,1表示开启

net.ipv4.tcp_fin_timeout
修改time_wait状的存在时间,默认的2MSL  修改有风险

net.ipv4.tcp_max_tw_buckets
所允许存在time_wait状态的最大数值,超过则立刻被清除并且警告

net.ipv4.ip_local_port_range
表示对外连接的端口范围。

somaxconn
前面说了Syn队列的最大长度限制,somaxconn参数决定Accept队列长度,在listen函数调用时backlog参数即决定Accept队列的长度,该参数太小也会限制最大并发连接数,因为同一时间完成3次握手的连接数量太小,server处理连接速度也就越慢。服务器端调用accept函数实际上就是从已连接Accept队列中取走完成三次握手的连接。

Accept队列和Syn队列是listen函数完成创建维护的。

/proc/sys/net/core/somaxconn修改

 

posted @   机猿巧合  阅读(1135)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示