操作系统内核主要配置:
-
fs.file-max: 系统允许打开的最大文件数。这个值决定了整个系统可以同时打开的文件总数。
-
fs.nr_open: 单个用户进程最大文件打开数。这个值限制了单个进程可以打开的文件数量。
-
net.core.somaxconn: 全连接队列长度。这个值定义了服务器可以监听的连接队列的最大长度。当连接队列满时,新的连接请求会被拒绝。
-
net.ipv4.tcp_max_syn_backlog: 半连接队列长度。这个值定义了 TCP 半连接队列的最大长度,即 SYN_RCVD 状态的连接队列。当队列满时,新的连接请求会被拒绝。
-
net.ipv4.tcp_syncookies: 是否使用 SYN Cookies。当设置为 1 时,启用 SYN Cookies 来防止 SYN Flood 攻击。值为 0 表示禁用 SYN Cookies。
-
net.core.netdev_max_backlog: 网卡数据包队列长度。这个值定义了网络设备驱动可以接收但尚未被处理的数据包的最大数量。
-
net.ipv4.tcp_max_tw_buckets: time-wait 最大队列长度。这个值定义了 time-wait 状态的连接队列的最大长度。
-
net.ipv4.tcp_tw_reuse: time-wait 是否重新用于新链接。当设置为 1 时,允许将处于 time-wait 状态的连接重新用于新的连接。
-
net.ipv4.tcp_tw_recycle: time-wait 快速回收。当设置为 1 时,允许快速回收处于 time-wait 状态的连接。
-
net.ipv4.tcp_keepalive_intvl: tcp报文探测时间间隔,单位秒。这个值定义了在 TCP 连接中发送探测报文的时间间隔。
-
net.ipv4.tcp_keepalive_time: tcp连接多少秒后没有数据报文时启动探测报文。这个值定义了在没有数据传输的情况下,TCP 连接在多长时间后开始发送探测报文。
-
net.ipv4.tcp_keepalive_probes: 探测次数。这个值定义了在 TCP 连接中发送探测报文的次数。
-
net.ipv4.tcp_fin_timeout: 保持fin-wait-2 状态多少秒。这个值定义了 TCP 连接在 FIN_WAIT2 状态中保持的时间。
-
net.ipv4.tcp_max_orphans: 最大孤儿socket数量。这个值定义了系统可以处理的孤儿 socket 的最大数量。孤儿 socket 是那些已经关闭但尚未完成四次握手的 socket。
-
net.core.optmem_max: 每个套接字所允许的最大缓存区大小。这个值定义了单个 socket 可以分配的最大内存。
-
net.core.rmem_default: 默认tcp数据接受窗口大小。这个值定义了 TCP 接收缓冲区的默认大小。
-
net.core.wmem_default: 默认tcp数据发送窗口大小。这个值定义了 TCP 发送缓冲区的默认大小。
-
net.core.rmem_max: TCP 接收缓冲区的最大大小。
-
net.core.wmem_max: TCP 发送缓冲区的最大大小。
-
net.ipv4.tcp_mem: tcp栈内存使用。这个值定义了 TCP 栈可以使用的内存的最小值、压力值和最大值。
-
net.ipv4.tcp_rmem: 读缓冲区大小。这个值定义了 TCP 接收缓冲区的最小值、默认值和最大值。
-
net.ipv4.tcp_wmem: 写缓冲区大小。这个值定义了 TCP 发送缓冲区的最小值、默认值和最大值。
TCP缓冲区参数
TCP提供端到端稳定的服务,TCP最大缓存涉及数据传输和接收缓冲区的管理。这个参数在网络通信中起着重要的作用,具体如下:
- 数据传输效率:TCP 协议通过滑动窗口机制来控制数据的发送和接收。发送方根据接收方的接收窗口大小来决定发送数据的量,而接收方则根据其接收缓存的大小来决定接收窗口的大小。因此,单个 TCP 连接的最大缓存大小直接影响到数据传输的效率。
- 流量控制:TCP 协议通过接收窗口来控制发送方的发送速率,避免发送方发送过多数据导致接收方无法及时处理。单个 TCP 连接的最大缓存大小可以帮助接收方更好地控制接收窗口,从而实现流量控制。
- 减少丢包:在网络拥塞的情况下,如果发送方发送的数据量超过了接收方的处理能力,可能会导致数据包的丢失。通过限制单个 TCP是的,
net.ipv4.tcp_keepalive_probes参数定义了在 TCP 连接中发送探测报文(心跳包)的次数。如果连续发送了这么多次探测报文都没有收到对端的响应,系统会认为连接已经断开,并自动关闭该连接。
具体来说
- tcp连接多少秒后没有数据报文时启动探测报文: 探测
net.ipv4.tcp_keepalive_time,例如设置为 30 秒。 - 探测报文发送V间隔:由
net.ipv4.tcp_keepalive_intvl参数定义,例如设置为 30 秒。 - 探测报文发送次数:由
net.ipv4.tcp_keepalive_probes参数定义,例如设置为 3 次。
假设探测报文的发送间隔是 30 秒,探测次数是 3 次,那么:
- 系统会在连接没有数据传输的情况下,每 30 秒发送一次探测报文。
- 如果连续发送了 3 次探测报文都没有收到对端的响应,系统会认为连接已经断开,并自动关闭该连接。
这种机制有助于:
- 释放资源:自动关闭长时间没有活动的连接,从而释放系统资源。
- 防止资源浪费:避免维持那些已经无法通信的连接,减少不必要的资源占用。