合 Linux中的tcp参数 net.ipv4.tcp_max_tw_buckets、net.core.somaxconn、net.ipv4.tcp_max_syn_backlog
Tags: Linux优化网络net.core.somaxconntcpnet.ipv4.tcp_max_tw_bucketsnet.ipv4.tcp_max_syn_backlog
简介
这些参数是 Linux 中 TCP/IP 协议栈相关的参数,具体含义如下:
net.ipv4.tcp_max_tw_buckets
:用于限制系统同时保持 TIME_WAIT 状态的最大数量,即控制系统中允许的最大连接数。当连接结束时,系统会在一段时间内将连接状态设置为 TIME_WAIT,以确保双方的数据传输正常完成。该参数的值通常建议根据服务器的硬件资源和预计的并发连接数来调整。默认值为262144,可以根据实际情况进行调整。net.core.somaxconn
:用于控制系统全局的 TCP 连接请求队列大小。该队列保存了连接请求等待处理的套接字,如果该队列满了,新的连接请求就会被拒绝。该参数的值通常建议根据服务器的硬件资源和预计的并发连接数来调整。默认值为 128,可以根据实际情况进行调整。net.ipv4.tcp_max_syn_backlog
:用于控制 TCP SYN 接受队列的大小,即 TCP 三次握手中 SYN 请求等待队列的最大长度。该参数的值通常建议根据服务器的硬件资源和预计的并发连接数来调整。默认值为2048,可以根据实际情况进行调整。
这些参数可以通过修改系统配置文件 /etc/sysctl.conf
或者通过命令行 sysctl
进行修改。修改完成后,可以通过 sysctl -p
命令使配置文件生效,或者通过重启系统使其生效。
虽然 TIME_WAIT 状态的存在是有必要的,但它毕竟在消耗系统资源,比如 TIME_WAIT 状态的端口就无法供新连接使用。Linux 提供了 tcp_max_tw_buckets 参数,当 TIME_WAIT 的连接数量超过该参数时,新关闭的连接就不再经历 TIME_WAIT 而直接关闭。
TIME-WAIT 状态的连接需要在一段时间后才能释放其资源,以确保所有的数据包都已经到达或被丢弃。这个时间通常称为 "两倍的最大段生存时间"(2MSL),而 MSL 是指 TCP 数据包在网络上保留的最长时间,以便在网络上被保留的任何数据包都可以被完全处理。TCP TIME-WAIT 状态的连接数量可能会很大,特别是在短时间内进行大量连接的情况下,这可能导致系统资源的不足。
在 Oracle RAC 中,建议将 net.ipv4.tcp_max_tw_buckets
参数设置为至少 60000 个,以确保系统能够处理大量的 TIME-WAIT 连接。在 RAC 中,每个节点上都会有大量的 TCP 连接,包括节点之间的连接、客户端连接和连接到数据库实例的其他服务连接等。这些连接在关闭时都会进入 TIME-WAIT 状态,因此建议将 net.ipv4.tcp_max_tw_buckets
参数设置为较高的值,以便系统可以处理所有这些连接。
net.ipv4.tcp_max_syn_backlog
是一个 Linux 内核参数,用于控制 TCP 栈可以排队的最大 SYN 请求数量。SYN 请求是 TCP 握手中的第一步,用于建立连接。当有大量的客户端同时向服务器发送 SYN 请求时,服务器可能无法立即处理所有的请求,因此需要将这些请求放入队列中等待处理。net.ipv4.tcp_max_syn_backlog
就是控制这个队列的大小。
如果 net.ipv4.tcp_max_syn_backlog
的值过小,可能会导致某些客户端无法建立连接。如果值过大,可能会占用过多的系统资源。因此,需要根据系统的实际情况来调整这个值。