当前位置: 首页 > news >正文

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(内存脏页占比阈值,超过则同步写入磁盘)

配置方式

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

  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 永久化)需要动态调整参数的场景
模块配置模块加载时永久(通过配置文件)特定内核模块参数的设置

相关文章:

  • 判断数组对象中是否某个字段的值有重复
  • 生产环境怎么移除console
  • 数字IC后端培训教程之数字后端项目典型案例分析
  • js 字符串中的特殊字符全部替换成定义对象里面key对应的value值(进阶篇)
  • Python | 赤道频散关系图
  • 【Redis】SDS结构
  • 图形化编程平台的破局之道:从工具同质化到生态差异化
  • 从MCU到SoC的开发思维转变
  • 2024年北理工Python123第六章测验题整理
  • React 播客专栏 Vol.9|React + TypeScript 项目该怎么起步?从 CRA 到配置全流程
  • 2025年Energy SCI1区TOP,改进雪消融优化算法ISAO+电池健康状态估计,深度解析+性能实测
  • UE RPG游戏开发练手 第二十一课 使用C++代码实现装备武器
  • C/C++ 内存管理深度解析:从内存分布到实践应用(malloc和new,free和delete的对比与使用,定位 new )
  • 如何使用 WebBrowserPassView 查看所有浏览器密码?
  • 用户态到内核态:Linux信号传递的九重门(二)
  • 动手学深度学习12.4.硬件-笔记练习(PyTorch)
  • 应急响应靶机——WhereIS?
  • C# 中 static的使用
  • Mysql的索引,慢查询和数据库表的设计以及乐观锁和悲观锁
  • DeepSeek | AI需求分析
  • 日本广岛大学一处拆迁工地发现疑似未爆弹
  • 英国首相斯塔默一处房产发生火灾
  • 国羽用冠军开启奥运周期,林丹:希望洛杉矶奥运取得更好成绩
  • “无锡景・江南韵”:中国评弹艺术在尼日利亚收获众多粉丝
  • 张笑宇:物质极大丰富之后,我们该怎么办?
  • 印度32座机场暂停民用航班运营,印称在边境多处发现无人机