Linux 系统内核参数优化配置入门
·
Linux 系统内核参数优化配置入门
一、配置说明
本文档针对 Docker 容器、Kafka、Tendis(Redis 兼容)、MinIO 等服务,优化系统内核参数和资源限制,提升高并发场景下的稳定性和性能。涉及两个核心配置文件:
/etc/sysctl.conf:系统内核参数(网络、内存、文件系统等)/etc/security/limits.conf:用户/进程资源限制(文件句柄数、进程数等)
二、核心配置详解
2.1 /etc/sysctl.conf 内核参数配置
通用基础配置(所有服务必备)
| 参数 | 配置值 | 作用 |
|---|---|---|
fs.file-max |
9223372036854775807 |
系统最大文件句柄数(支持高并发服务,如 Docker 多容器、Kafka 连接) |
net.core.somaxconn |
4096 |
TCP 监听队列最大长度(防止高并发下连接被拒绝,Nginx/Kafka 必备) |
net.ipv4.ip_local_port_range |
1024 65535 |
本地端口范围(扩大可用端口,避免容器/服务端口耗尽) |
net.ipv4.tcp_tw_reuse |
1 |
允许 TIME_WAIT 状态的 socket 复用(减少连接资源占用) |
net.ipv4.tcp_tw_recycle |
1 |
快速回收 TIME_WAIT 连接(需注意:NAT 网络环境可能冲突,建议仅内网启用) |
net.ipv4.tcp_fin_timeout |
30 |
TCP 连接关闭后 FIN_WAIT 状态超时时间(默认 60s,缩短至 30s 释放资源) |
Kafka 专属配置(官方推荐)
| 参数 | 配置值 | 作用 |
|---|---|---|
vm.max_map_count |
262144 |
最大内存映射区域数(Kafka 依赖大量内存映射文件存储消息,默认值 65530 可能不足) |
vm.swappiness |
1 |
虚拟内存交换策略(值越低越倾向于使用物理内存,避免 Kafka 因 swap 导致性能下降) |
Tendis/MinIO 专属配置
| 参数 | 配置值 | 作用 |
|---|---|---|
vm.overcommit_memory |
1 |
内存超分配策略(Redis/Tendis 推荐设置为 1,允许内核分配超过物理内存的内存,避免 fork 子进程时 OOM) |
net.core.rmem_max/wmem_max |
16777216 |
最大套接字缓冲区大小(提升网络吞吐量,MinIO 分布式存储、Tendis 主从同步必备) |
Docker 网络优化
| 参数 | 配置值 | 作用 |
|---|---|---|
net.bridge.bridge-nf-call-iptables |
1 |
启用桥接网络的 iptables 规则(Docker 桥接模式下,确保容器网络与宿主机防火墙规则互通) |
net.bridge.bridge-nf-call-ip6tables |
1 |
IPv6 桥接网络 iptables 规则(同上,适配 IPv6 环境) |
net.ipv4.ip_forward |
1 |
开启 IP 转发(允许容器跨网段通信,Docker 多网络模式必备) |
2.2 /etc/security/limits.conf 资源限制配置
全局用户限制(所有用户生效)
| 配置 | 作用 |
|---|---|
* soft nofile 655350 |
所有用户软限制:最大打开文件句柄数(默认 1024,高并发服务需提升) |
* hard nofile 655350 |
所有用户硬限制:最大打开文件句柄数(软限制的上限) |
* soft nproc 655350 |
所有用户软限制:最大进程数(避免多进程服务因进程数不足被限制) |
* hard nproc 655350 |
所有用户硬限制:最大进程数 |
Docker 守护进程专属限制(root 用户)
| 配置 | 作用 |
|---|---|
root soft nofile 655350 |
Docker 守护进程(root 运行)的文件句柄软限制(Docker 管理大量容器需更高限制) |
root hard nofile 655350 |
Docker 守护进程的文件句柄硬限制 |
三、操作步骤
1. 修改 /etc/sysctl.conf
vi /etc/sysctl.conf
fs.file-max = 2000000
# TCP监听队列最大长度(Nginx/Kafka高并发必备)
net.core.somaxconn = 4096
# 本地端口范围(避免容器端口耗尽)
net.ipv4.ip_local_port_range = 1024 65535
# TCP连接回收(减少TIME_WAIT)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
按上述配置添加/修改参数,保存退出(:wq)。
2. 应用 sysctl 配置(立即生效)
sysctl -p
注意:若提示 net.bridge.bridge-nf-call-iptables 等参数不存在,需先加载 bridge 模块:
modprobe br_netfilter # 加载桥接模块(Docker 网络依赖)
sysctl -p # 再次应用配置
3. 修改 /etc/security/limits.conf
vi /etc/security/limits.conf
# 全局用户文件句柄限制
* soft nofile 655350
* hard nofile 655350
* soft nproc 655350
* hard nproc 655350
# Docker守护进程专属限制
root soft nofile 655350
root hard nofile 655350
添加上述资源限制配置,保存退出。
4. 使 limits.conf 配置生效
- 普通用户:重新登录当前用户(或执行
su - 用户名切换用户) - root 用户:需重启系统(或重启 PAM 服务:
systemctl restart systemd-logind)
四、验证配置是否生效
验证 sysctl 参数
# 验证文件句柄数
sysctl fs.file-max # 预期输出:fs.file-max = 9223372036854775807
# 验证 TCP 监听队列长度
sysctl net.core.somaxconn # 预期输出:net.core.somaxconn = 4096
# 验证 Kafka 内存映射数
sysctl vm.max_map_count # 预期输出:vm.max_map_count = 262144
验证 limits 资源限制
# 查看当前用户文件句柄限制(需重新登录后执行)
ulimit -n # 预期输出:655350
# 查看进程数限制
ulimit -u # 预期输出:655350
# 查看 root 用户限制(需切换到 root)
su - root
ulimit -n # 预期输出:655350
五、注意事项
1. 参数合理性
fs.file-max设置为9223372036854775807(2^63-1)是 Linux 内核支持的最大值,适用于超大规模服务;普通场景可设为2000000(200万)。vm.swappiness取值范围 0-100,Kafka/Redis 建议设为1(尽量不使用 swap),数据库服务可设为10(平衡内存与 swap)。
2. 潜在风险
net.ipv4.tcp_tw_recycle:在 NAT 网络环境(如云服务器)可能导致连接异常,建议仅在内网服务器启用,公网服务器可关闭(设为0)。vm.overcommit_memory=1:可能导致系统 OOM(内存溢出),需确保物理内存充足或配置 swap 分区作为兜底。
3. 持久化生效
/etc/sysctl.conf修改后需执行sysctl -p立即生效,重启后自动生效。/etc/security/limits.conf修改后需重新登录或重启,Docker 服务需重启(systemctl restart docker)以应用新的资源限制。
六、总结
通过以上配置,可显著提升服务器在高并发、多容器场景下的稳定性,尤其适配 Docker、Kafka、Tendis、MinIO 等服务的资源需求。建议根据实际业务场景调整参数值(如文件句柄数、内存映射数),并通过监控工具(如 Prometheus)观察系统指标,持续优化。
更多推荐





所有评论(0)