Linux系统的内核参数控制着系统硬件资源调度、网络连接处理、内存管理等核心行为,默认配置通常偏向通用兼容性,难以满足高负载业务场景的性能需求。通过调整内核参数,可以针对性优化系统在不同业务场景下的表现,降低资源浪费,提升整体运行效率。

查看当前内核参数
在调整内核参数之前,需要先了解当前系统的参数配置情况,常用的查看方式有两种:
- 使用
sysctl -a命令可以查看所有当前生效的内核参数,输出内容较多,可以结合grep过滤需要查看的参数项 - 直接查看
/proc/sys/目录下的文件,该目录下的文件路径和内核参数的命名规则一一对应,例如/proc/sys/net/ipv4/tcp_syncookies对应参数net.ipv4.tcp_syncookies
以下是查看网络相关内核参数的示例:
# 查看所有内核参数 sysctl -a # 过滤查看网络相关参数 sysctl -a | grep net.ipv4 # 直接查看单个参数文件 cat /proc/sys/net/ipv4/tcp_syncookies
常用性能优化内核参数说明
不同业务场景需要调整的侧重点不同,以下是几类常见的优化参数:
网络相关参数
| 参数名 | 默认值 | 优化建议值 | 参数说明 |
|---|---|---|---|
| net.ipv4.tcp_syncookies | 1 | 1 | 开启SYN Cookie防护,防止SYN Flood攻击,高并发场景建议保持开启 |
| net.ipv4.tcp_tw_reuse | 0 | 1 | 允许复用TIME_WAIT状态的socket,适用于高短连接并发场景 |
| net.ipv4.tcp_tw_recycle | 0 | 0 | 不建议开启,在NAT场景下会导致连接异常 |
| net.ipv4.tcp_max_tw_buckets | 16384 | 32768 | 增加TIME_WAIT socket的最大数量,避免高并发下出现"too many open files"错误 |
| net.ipv4.ip_local_port_range | 32768 60999 | 1024 65535 | 扩大本地端口范围,提升高并发场景下的端口可用量 |
| net.core.somaxconn | 128 | 4096 | 增加socket监听队列的最大长度,避免高并发下连接被丢弃 |
内存相关参数
vm.swappiness:默认值为60,取值范围0-100,表示系统使用交换分区的倾向,值越高越倾向于使用交换分区。对于内存充足的业务服务器,建议调整为10-30,减少交换分区带来的性能损耗vm.overcommit_memory:默认值为0,表示内核会根据启发式算法判断内存分配是否合理。Redis等内存型服务建议设置为1,允许内核分配所有可用的物理内存,避免内存分配失败vm.dirty_ratio:默认值为20,表示当脏页占系统总内存的比例达到该值时,系统会触发脏页回写。对于IO密集型场景,可以适当调大该值,减少回写频率
文件系统相关参数
fs.file-max:默认值为根据系统内存自动计算,表示系统支持的最大打开文件数。高并发场景下建议调整为1000000以上,避免文件描述符耗尽fs.inotify.max_user_watches:默认值为8192,表示单用户可监控的文件数量。如果业务使用inotify监控大量文件,需要调大该值
内核参数调整方法
临时调整(重启后失效)
临时调整适合测试参数效果,不需要修改配置文件,重启后参数会恢复默认值。有两种操作方式:
方式一:使用sysctl -w命令直接设置参数:
# 临时调整本地端口范围 sysctl -w net.ipv4.ip_local_port_range="1024 65535" # 临时调整最大打开文件数 sysctl -w fs.file-max=1000000
方式二:直接修改/proc/sys/目录下的对应文件:
# 修改端口范围参数 echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range # 修改最大打开文件数 echo 1000000 > /proc/sys/fs/file-max
永久调整(重启后仍生效)
永久调整需要修改内核参数配置文件,系统重启后会自动加载配置。步骤如下:
1. 编辑/etc/sysctl.conf文件,添加需要调整的参数的键值对:
# 编辑配置文件 vim /etc/sysctl.conf # 在文件末尾添加以下内容 net.ipv4.ip_local_port_range = 1024 65535 fs.file-max = 1000000 net.core.somaxconn = 4096 vm.swappiness = 10
2. 执行sysctl -p命令让配置立即生效,不需要重启系统:
sysctl -p
如果需要单独加载某个配置文件,可以指定文件路径:
sysctl -p /etc/sysctl.d/custom.conf
调整注意事项
- 调整参数前建议先备份当前配置,避免参数设置错误后无法恢复。可以执行
sysctl -a > sysctl_backup.conf备份所有参数 - 不要盲目照搬网上的优化参数,需要结合自己的业务场景、服务器硬件配置(内存大小、CPU核心数、磁盘类型)调整,例如小内存服务器调大
vm.dirty_ratio可能导致内存不足 - 每次只调整少量参数,调整后观察系统运行情况,确认无异常后再继续调整其他参数,方便定位问题
- 部分参数调整后需要重启相关服务才能生效,例如调整网络参数后,可能需要重启网络服务或者业务进程
- 生产环境调整参数前,建议先在测试环境验证效果,避免影响线上业务
验证调整效果
参数调整完成后,可以通过以下方式验证调整是否生效:
# 查看指定参数是否生效 sysctl net.ipv4.ip_local_port_range # 查看网络连接状态,确认TIME_WAIT数量是否合理 netstat -ant | grep TIME_WAIT | wc -l # 查看内存使用情况,确认swap使用率是否下降 free -h
如果调整后出现系统异常,比如网络断开、服务无法启动,可以恢复备份的参数配置,或者将/etc/sysctl.conf中新增的参数行删除,重新执行sysctl -p恢复默认配置。