Linux 内核参数
文章目录
- 什么是内核参数
- 参数种类
- 配置方式
- 1. 编译内核时配置
- 2. 内核启动时配置
- 3. 内核运行时配置
- 4. 加载内核模块时配置
- 总结
什么是内核参数
内核参数是 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 (内存脏页占比阈值,超过则同步写入磁盘) |
配置方式
有下面几种办法向内核传递参数以控制其行为:
- 编译内核时:修改内核 .config 文件,或直接修改内核源码。
- 内核启动时:通过命令行参数。
- 内核运行时:通过 /proc/sys/ 和 /sys/ 中的文件。
- 加载内核模块时:通过 /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 永久化) | 需要动态调整参数的场景 |
模块配置 | 模块加载时 | 永久(通过配置文件) | 特定内核模块参数的设置 |