Linux内核优化
1.文件描述符限制
注意,此参数不能完全代替用户级别的 nofile 配置,后者仍需在 /etc/security/limits.conf 中进行设置。
fs.file-max = 2097152:设置系统级别的最大文件描述符数量(file-max),用于限制整个系统中打开的文件数量上限。较高的文件描述符限制可以支持更多并发连接和进程,特别适合高并发场景下的服务。
2.网络参数优化
net.ipv4.tcp_syncookies = 1:启用 SYN Cookie 机制,以防止 SYN Flood 攻击。当半连接队列(SYN 队列)满时,服务器会使用加密的 Cookie 来验证连接请求的有效性,防止大量伪造的连接请求导致资源耗尽。 net.ipv4.tcp_tw_reuse = 1:启用重用 TIME-WAIT 状态下的连接。启用该选项可以在服务器上迅速重用处于 TIME-WAIT 状态的端口,适合短时间内大量连接的高并发场景。 net.ipv4.tcp_tw_recycle = 1:快速回收 TIME-WAIT 连接。这个选项加快了 TIME-WAIT 状态下连接的回收速度,可以减少占用的系统资源。但在 NAT(网络地址转换)环境中可能导致问题,因此该设置要慎重使用。 net.ipv4.tcp_fin_timeout = 15:缩短 TCP 连接的 FIN-WAIT 状态等待时间,默认值通常较高(60 秒)。通过缩短此时间,可以加速资源的回收,适合高并发、频繁连接的应用场景。 net.core.somaxconn = 4096:设置全连接队列的最大长度,控制服务器的最大连接能力。增大该值有助于处理大量同时发起的连接请求。
3.TCP 缓冲区大小
net.ipv4.tcp_rmem = 4096 87380 16777216:设置 TCP 接收缓冲区大小。该值以三段式(最小值、默认值、最大值)指定。当系统的带宽或数据流量较大时,可以增大最大值以提升数据接收能力。 net.ipv4.tcp_wmem = 4096 65536 16777216:设置 TCP 发送缓冲区大小,同样为三段式配置。增大最大值可以在网络繁忙时提高发送性能。 net.core.rmem_max = 16777216:指定接收缓冲区的最大值,允许接收更大的数据包,减少拥塞带来的延迟。 net.core.wmem_max = 16777216:指定发送缓冲区的最大值,可以提高在高并发场景下的网络吞吐量和稳定性。
4.Swap 性能调整
vm.swappiness = 10:控制内存和 Swap 交换分区的使用倾向。值越小,系统越倾向于使用物理内存而非 Swap。通常设置为 10 左右,有助于在系统内存充足时减少对 Swap 的依赖,避免性能下降。 vm.dirty_ratio = 20:设置内存中脏页的比例上限,当脏页达到该比例时,系统会将其写回磁盘。降低这个比例有助于加速数据写入,减少内存占用。 vm.dirty_background_ratio = 10:设置后台写入的阈值比例,超过此比例时会自动触发后台写入。较低的比例有助于降低大数据写入时对系统性能的影响。
5.网络核心安全设置
net.ipv4.ip_forward = 0:禁用 IP 转发功能,防止服务器充当路由器。适合没有路由需求的服务器应用环境,提升安全性。 net.ipv4.icmp_echo_ignore_all = 1:禁用对所有 ICMP 请求的响应(如 ping 请求)。这样可以防止服务器响应 ICMP 攻击或被扫描探测,增强安全性。
6.半连接和全连接优化
net.ipv4.tcp_max_syn_backlog = 1024:设置半连接队列的长度上限,控制服务器在建立连接三次握手过程中可同时保持的未完成连接数量。较高的值可以提高处理并发请求的能力,适合高并发服务器。 net.core.somaxconn = 1024:限制全连接队列的长度上限,用于存放已经完成三次握手等待应用程序处理的连接请求。增大该值可以避免高并发情况下因队列溢出导致的连接丢失。
7.配置演示
完成以上配置后,使用以下命令使其生效:sysctl -p
这些参数调整综合作用于系统的资源分配、网络性能、安全性和连接稳定性,能够有效优化系统在高并发和重负载环境下的表现。
# 1. 文件描述符限制(仍需在 limits.conf 中配置,不支持在 sysctl.conf 中设置)
需在 /etc/security/limits.conf 中设置:
soft nofile 102400
hard nofile 102400
fs.file-max = 2097152
# 2. 网络参数优化
net.ipv4.tcp_syncookies = 1 # 启用 SYN Cookie 防止洪泛攻击
net.ipv4.tcp_tw_reuse = 1 # 重用 TIME-WAIT 连接
net.ipv4.tcp_tw_recycle = 1 # 快速回收 TIME-WAIT 连接
net.ipv4.tcp_fin_timeout = 15 # 缩短 FIN_WAIT 超时时间
net.core.somaxconn = 4096 # 增加最大连接队列长度
# 3. TCP 缓冲区大小
net.ipv4.tcp_rmem = 4096 87380 16777216 # TCP 读取缓冲区
net.ipv4.tcp_wmem = 4096 65536 16777216 # TCP 写入缓冲区
net.core.rmem_max = 16777216 # 接收缓冲区最大值
net.core.wmem_max = 16777216 # 发送缓冲区最大值
# 4. Swap 性能调整
vm.swappiness = 10 # 降低 Swap 使用倾向
vm.dirty_ratio = 20 # 内存中脏页上限比例
vm.dirty_background_ratio = 10 # 内存中脏页达到比例时写回磁盘
# 5. 网络核心安全设置
net.ipv4.ip_forward = 0 # 禁用 IP 转发
net.ipv4.icmp_echo_ignore_all = 1 # 禁用对 ICMP 响应
# 6. 半连接和全连接优化
net.ipv4.tcp_max_syn_backlog = 1024 # 根据需求调整,默认值在128~256之间
net.core.somaxconn = 1024 # 设置全连接队列长度
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
sysctl -p