Linux 内核参数

什么是内核参数

内核参数是 Linux 系统中用于控制和调整内核行为的可配置选项。这些参数影响系统的性能、安全性和各种功能特性。

参数种类

大部分参数和某个子系统相关,需要在编译或加载时加入子系统,而且相关硬件需要存在。

在这里插入图片描述

目录主要作用典型参数示例
abi/应用程序二进制接口相关较少直接调整,通常由系统自动管理
debug/内核调试参数kernel.debug.exception-trace(控制是否记录异常跟踪信息)
dev/设备驱动相关dev.cdrom.autoeject(CDROM自动弹出控制,1=启用,0=禁用)
fs/文件系统参数fs.file-max(系统最大文件句柄数)
kernel/通用内核行为kernel.shmmax(共享内存段最大尺寸,单位字节)
net/网络协议栈参数net.ipv4.tcp_fin_timeout(TCP连接FIN_WAIT状态超时时间)
sunrpc/NFS/RPC 相关sunrpc.rpc_timeout(指定 RPC 请求的超时时间)
user/用户空间限制user.max_user_namespaces(允许创建的最大用户命名空间数量)
vm/虚拟内存管理vm.dirty_ratio(内存脏页占比阈值,超过则同步写入磁盘)

配置方式

有下面几种办法向内核传递参数以控制其行为:

  1. 编译内核时:修改内核 .config 文件,或直接修改内核源码。
  2. 内核启动时:通过命令行参数。
  3. 内核运行时:通过 /proc/sys/ 和 /sys/ 中的文件。
  4. 加载内核模块时:通过 /etc/modprobe.d/ 中的 .conf 文件,或通过 insmod/modprobe 传递参数。

下面针对不同的内核参数配置方式,分别给出示例说明:

1. 编译内核时配置

在编译内核期间,可以借助内核配置文件或者直接修改内核源代码来设置参数。

示例:设置 CONFIG_RCU_CPU_STALL_TIMEOUT 参数,该参数是内核的 RCU(Read-Copy Update)机制的超时参数,单位为秒。

操作步骤:

  • 进入内核源码目录,
  • 打开配置界面,可使用 make menuconfig 命令。
  • 找到选项对应路径:Kernel hacking >
    RCU Debugging > (21) RCU CPU stall timeout in seconds
  • 对参数进行设置
  • 保存配置后,执行编译和安装操作,即 make && make install

特点:这种配置方式会使参数成为内核的固定设置,一旦内核编译完成,参数就无法再改变,除非重新编译内核。

2. 内核启动时配置

在内核启动阶段,可以通过修改引导加载程序(如 GRUB)的命令行参数来传递参数。

示例:调整 swappiness 参数,该参数用于控制内存与交换空间的使用倾向。
操作步骤:

  • 打开 GRUB 配置文件,路径为:/etc/default/grub
  • 找到 GRUB_CMDLINE_LINUX 行,并添加参数,示例如下:GRUB_CMDLINE_LINUX=“swappiness=10”
  • 更新 GRUB 配置,执行命令:update-grub
  • 重启系统使配置生效

特点:此方式设置的参数会在每次系统启动时生效,不过若要修改参数,就需要重新编辑 GRUB 配置文件。

3. 内核运行时配置

在内核运行过程中,可以通过 /proc/sys/ 或 /sys/ 目录下的文件来动态调整参数。

示例:修改 net.ipv4.tcp_tw_recycle 参数,该参数用于控制 TCP TIME_WAIT 状态的处理。
临时修改(重启后失效):

  • 直接执行命令:echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle

永久修改:

  • 编辑 sysctl 配置文件,路径为:/etc/sysctl.conf
  • 添加或修改相应行:net.ipv4.tcp_tw_recycle = 1
  • 使配置立即生效,执行命令:sysctl -p

特点:这种配置方式灵活方便,无需重启系统即可生效,但临时修改的参数在系统重启后会恢复默认值。

4. 加载内核模块时配置

在加载内核模块时,可以通过配置文件或命令行参数来传递参数。

示例:设置 loop 模块的最大设备数。

通过配置文件设置:

  • 创建或编辑模块配置文件,路径为:/etc/modprobe.d/loop.conf
  • 添加内容:options loop max_loop=64
  • 重新加载模块,执行命令:modprobe -r loop && modprobe loop

通过命令行设置:

  • 执行命令:modprobe loop max_loop=64

特点:这种配置方式只对特定的内核模块有效,并且需要确保模块加载时参数能够正确传递。

总结

配置方式生效时间持久性适用场景
编译内核内核编译时永久(除非重新编译)需要深度定制内核功能的场景
启动参数系统启动时永久(需修改 GRUB 配置)系统启动相关参数的设置
/proc/sys即时生效临时(可通过 sysctl.conf 永久化)需要动态调整参数的场景
模块配置模块加载时永久(通过配置文件)特定内核模块参数的设置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Li-Yongjun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值