Linux内核可配置的参数

sysctl -a 命令会列出当前Linux内核所有可配置的参数及其当前值。这些参数允许你在系统运行时动态地调整内核的行为,而无需重新编译内核或重启系统。

内容非常多,因为内核有很多可调的方面。我们可以把它们大致分为几个主要类别:

  1. kernel.*: 内核核心参数

  2. vm.*: 虚拟内存管理 (Virtual Memory)

  3. net.*: 网络相关参数 (Networking)

  4. fs.*: 文件系统相关参数 (File System)

  5. dev.*: 特定设备参数

  6. abi.*: 应用程序二进制接口 (Application Binary Interface)

  7. user.*: 用户命名空间限制

下面我会对每一类进行解释,并列举一些常见的、重要的参数:


1. kernel.* (内核核心参数)

这类参数控制着内核的许多基本行为。

  • kernel.hostname = your_hostname

    • 解释: 系统的主机名。

  • kernel.domainname = (none)

    • 解释: 系统的 NIS/YP 域名。

  • kernel.ostype = Linux

    • 解释: 操作系统类型。

  • kernel.osrelease = 5.15.0-76-generic (示例版本号)

    • 解释: 操作系统内核版本号。

  • kernel.version = #83~20.04.1-Ubuntu SMP Mon Jun 5 11:53:06 UTC 2023 (示例)

    • 解释: 内核编译的具体版本信息,包括编译日期等。

  • kernel.panic = 0

    • 解释: 当内核发生严重错误 (panic) 时,系统在多少秒后自动重启。0 表示不自动重启。

  • kernel.panic_on_oops = 1

    • 解释: 当内核发生 oops (一种不那么严重的错误,但仍有问题) 时是否触发 panic。

  • kernel.shmmax = 18446744073692774399 (示例,非常大的值)

    • 解释: 单个共享内存段的最大尺寸(字节)。对数据库等应用很重要。

  • kernel.shmall = 18446744073692774399 (示例,非常大的值)

    • 解释: 系统范围内共享内存总页数。

  • kernel.shmmni = 4096

    • 解释: 系统范围内共享内存段的最大数量。

  • kernel.msgmax = 65536

    • 解释: 单个消息队列中消息的最大字节数。

  • kernel.msgmnb = 65536

    • 解释: 单个消息队列的最大字节数。

  • kernel.msgmni = 32000

    • 解释: 系统中消息队列标识符的最大数量。

  • kernel.sem = 250 32000 32 128

    • 解释: System V 信号量参数 (SEMMSL, SEMMNS, SEMOPM, SEMMNI)。

  • kernel.sysrq = 1

    • 解释: 是否启用 "Magic SysRq key"。这是一个调试工具,允许通过特定组合键直接向内核发送命令。

  • kernel.pid_max = 32768

    • 解释: 系统中进程ID的最大值。

  • kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E (Ubuntu 特有)

    • 解释: 当程序崩溃产生 core dump 文件时,文件的命名模式或处理程序。Ubuntu 使用 apport 来收集崩溃报告。

  • kernel.randomize_va_space = 2

    • 解释: 地址空间布局随机化 (ASLR) 的级别,用于增强安全性。2 表示完全随机化。

  • kernel.threads-max = ...

    • 解释: 系统支持的最大线程数。


2. vm.* (虚拟内存管理)

这类参数控制内核如何管理内存,包括物理内存和交换空间 (swap)。

  • vm.swappiness = 60

    • 解释: 内核使用交换空间的积极程度。值从 0 到 100。0 表示尽可能不使用 swap,100 表示积极使用 swap。默认 60。服务器上如果有足够内存,可以适当调低。

  • vm.dirty_background_ratio = 10

    • 解释: 当脏页 (已修改但未写入磁盘的内存页) 占总可用内存的百分比达到此值时,内核后台进程开始将脏页写回磁盘。

  • vm.dirty_ratio = 20

    • 解释: 当脏页占总可用内存的百分比达到此值时,进行写操作的进程会被阻塞,直到足够的脏页被写回磁盘。

  • vm.vfs_cache_pressure = 100

    • 解释: 内核回收用于目录和inode缓存的内存的倾向性。值越大,回收越积极。

  • vm.overcommit_memory = 0

    • 解释: 内存分配策略。

      • 0: 内核执行启发式内存过量分配处理,通常会允许适度的过量分配,但如果明显超出,则会拒绝。

      • 1: 内核总是允许过量分配,不进行检查。

      • 2: 内核不允许过量分配超过 (SwapTotal + RAM * vm.overcommit_ratio / 100) 的内存。

  • vm.overcommit_ratio = 50

    • 解释: 当 vm.overcommit_memory 设置为 2 时,允许过量分配的物理内存百分比。

  • vm.min_free_kbytes = ...

    • 解释: 强制Linux VM保留的最小可用千字节数。确保系统在内存紧张时仍能执行关键操作。

  • vm.nr_hugepages = 0

    • 解释: 配置的巨页 (Huge Pages) 数量。巨页可以提高某些高性能应用的内存性能。


3. net.* (网络相关参数)

这是非常大的一类,通常会进一步细分为 net.ipv4.*, net.ipv6.*, net.core.* 等。

net.core.* (核心网络参数)
  • net.core.somaxconn = 128 (默认可能较低, 建议调高)

    • 解释: TCP监听队列的最大长度。对于高并发服务器,这个值需要调大 (例如 1024, 4096 或更高)。

  • net.core.netdev_max_backlog = 1000

    • 解释: 当网络接口接收数据包的速度快于内核处理的速度时,允许排队的最大数据包数量。

  • net.core.rmem_default = 212992

    • 解释: TCP套接字接收缓冲区的默认大小。

  • net.core.wmem_default = 212992

    • 解释: TCP套接字发送缓冲区的默认大小。

  • net.core.rmem_max = ...

    • 解释: TCP套接字接收缓冲区的最大大小。

  • net.core.wmem_max = ...

    • 解释: TCP套接字发送缓冲区的最大大小。

net.ipv4.* (IPv4 特定参数)
  • net.ipv4.ip_forward = 0

    • 解释: 是否启用IPv4转发 (即作为路由器)。0 为禁用,1 为启用。

  • net.ipv4.tcp_syncookies = 1

    • 解释: 是否启用 SYN Cookies。当 SYN 队列溢出时,可以帮助防御 SYN Flood 攻击。

  • net.ipv4.tcp_tw_reuse = 0 (或 1)

    • 解释: 是否允许将 TIME_WAIT 状态的套接字重新用于新的 TCP 连接。通常在客户端或负载均衡器上设置为 1,可以快速回收端口。

  • net.ipv4.tcp_tw_recycle = 0 (已废弃且不推荐使用)

    • 解释: 是否快速回收 TIME_WAIT 状态的套接字。注意:此参数在高版本内核中已移除或不建议使用,因为它可能导致NAT环境下的问题。通常应保持禁用 (0)。

  • net.ipv4.tcp_fin_timeout = 60

    • 解释: 对于已关闭的本地 TCP 连接,保持在 FIN_WAIT_2 状态的时间。

  • net.ipv4.tcp_keepalive_time = 7200

    • 解释: TCP 发送 keepalive 消息的频率 (秒)。

  • net.ipv4.tcp_keepalive_intvl = 75

    • 解释: 当 keepalive探测未得到响应时,重试发送的间隔时间 (秒)。

  • net.ipv4.tcp_keepalive_probes = 9

    • 解释: 在断定连接失效前,发送 keepalive 探测的次数。

  • net.ipv4.ip_local_port_range = 32768 60999

    • 解释: 本地TCP/UDP端口的可用范围 (用于客户端连接或服务器的临时端口)。

  • net.ipv4.tcp_max_syn_backlog = ...

    • 解释: 未完成连接(SYN_RECV状态)的队列最大长度。

  • net.ipv4.tcp_congestion_control = cubic (或 bbr)

    • 解释: TCP 拥塞控制算法。cubic 是默认的,bbr 是Google开发的较新算法,在高延迟或有丢包的网络中表现可能更好。

  • net.ipv4.conf.all.accept_redirects = 0

  • net.ipv4.conf.default.accept_redirects = 0

    • 解释: 是否接受 ICMP 重定向报文。出于安全考虑,通常设置为 0。

  • net.ipv4.conf.all.secure_redirects = 1

    • 解释: 是否只接受来自网关列表中的主机的ICMP安全重定向。

  • net.ipv4.conf.all.send_redirects = 1 (如果是路由器则为1,否则为0)

    • 解释: 是否发送 ICMP 重定向报文。

  • net.ipv4.conf.all.rp_filter = 1 (或 2)

    • 解释: 反向路径过滤,用于防止 IP 欺骗。1 为严格模式,2 为松散模式。

net.ipv6.* (IPv6 特定参数)
  • 与 IPv4 类似,但针对 IPv6。例如:

    • net.ipv6.conf.all.forwarding = 0

    • net.ipv6.conf.all.accept_redirects = 0

    • net.ipv6.conf.all.disable_ipv6 = 0 (0 表示启用IPv6, 1 表示禁用指定接口的IPv6)

    • net.ipv6.conf.default.disable_ipv6 = 0


4. fs.* (文件系统相关参数)

  • fs.file-max = ...

    • 解释: 系统级别的文件句柄最大数量(所有进程打开的文件总数)。

  • fs.nr_open = 1048576

    • 解释: 单个进程可以分配的文件句柄的最大数量(这个值受限于 fs.file-max 和 ulimit)。

  • fs.inotify.max_user_watches = 8192 (默认可能较低)

    • 解释: 每个用户可以创建的 inotify watch 的最大数量。当使用像 VS Code、文件同步工具等监视大量文件变化的程序时,可能需要调大此值。

  • fs.inotify.max_user_instances = 128

    • 解释: 每个用户可以创建的 inotify 实例的最大数量。

  • fs.aio-max-nr = 65536

    • 解释: 系统中异步I/O请求的最大数量。


5. dev.* (特定设备参数)

  • 这些参数通常是针对特定类型的设备或驱动程序的。例如,你可能会看到与特定网络接口卡 (NIC)、CD-ROM 或其他硬件相关的参数。

  • 例如: dev.cdrom.info, dev.mac_hid.*

  • 一般情况下,用户很少直接调整这些参数,它们通常由驱动程序或更高级别的工具管理。


6. abi.* (应用程序二进制接口)

  • abi.vsyscall32 = 1

    • 解释: 是否启用 32 位应用程序的 vsyscall 仿真。通常不需要修改。


7. user.* (用户命名空间限制)

  • 这些参数用于控制用户命名空间 (user namespaces) 的资源限制,这是一个用于容器化和权限隔离的 Linux 特性。

  • 例如:

    • user.max_user_namespaces = ...

    • user.max_mnt_namespaces = ...


如何理解和使用这些参数?

  1. 大部分参数不需要修改: 对于大多数桌面用户和许多服务器场景,默认值已经足够好。

  2. 按需调整: 只有当你遇到特定的性能瓶颈、安全需求或应用兼容性问题时,才考虑调整这些参数。

  3. 查阅文档: 在修改任何参数之前,务必查阅相关文档(如 man sysctl.conf,内核文档 Documentation/sysctl/ 目录下的文件,或在线资源)来理解其确切含义和潜在影响。

  4. 临时修改:
    sudo sysctl -w parameter.name=value
    这种修改在系统重启后会丢失。

  5. 永久修改:

    • 编辑 /etc/sysctl.conf 文件。

    • 或者,在 /etc/sysctl.d/ 目录下创建一个新的 .conf 文件 (例如 99-custom.conf)。

    • 格式为 parameter.name = value。

    • 修改后,执行 sudo sysctl -p 或 sudo sysctl --system 来使配置生效(-p 只加载指定文件,通常是 /etc/sysctl.conf;--system 会加载所有 /etc/sysctl.d/*.conf 和 /etc/sysctl.conf)。

  6. 逐步调整和测试: 不要一次修改太多参数。修改一个或一组相关的参数后,进行测试,观察系统行为和性能,确保没有负面影响。

sysctl -a 的输出非常庞大,但通过分类和关注其中一些关键参数,你就能更好地理解你的 Ubuntu 系统是如何运行和配置的。希望这个解释对你有帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/81420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【背包dp-----分组背包】------(标准的分组背包【可以不装满的 最大价值】)

通天之分组背包 题目链接 题目描述 自 01 01 01 背包问世之后,小 A 对此深感兴趣。一天,小 A 去远游,却发现他的背包不同于 01 01 01 背包,他的物品大致可分为 k k k 组,每组中的物品相互冲突,现在&a…

操作系统:os概述

操作系统:OS概述 程序、进程与线程无极二级目录三级目录 程序、进程与线程 指令执行需要那些条件?CPU内存 需要数据和 无极 二级目录 三级目录

RAG文本分块

不论是向量化模型还是大语言模型,都存在输入长度的限制。对于超过限制的文本,模型会进行截断,造成语义缺失。分块可以确保每个文本片段都在模型的处理范围内,避免重要信息的丢失。 文本分块的核心原则 高质量分块的核心原则是&a…

2025 年九江市第二十三届中职学校技能大赛 (网络安全)赛项竞赛样题

2025 年九江市第二十三届中职学校技能大赛 (网络安全)赛项竞赛样题 (二)A 模块基础设施设置/安全加固(200 分)A-1 任务一登录安全加固(Windows,Linux)A-2 任务二 Nginx 安全策略&…

量子隧穿:PROFINET到Ethernet ip的无损耗协议转换方案转

在本季度的生产工作中,我们成功实现了仓储物流自动化分拣系统中的关键技术突破。我们面临的主要挑战是将采用EtherNet/IP协议的输送带控制器与PROFINET协议的上位系统进行有效通信。通过引入ethernet IP转PROFINET网关倍讯科技BX-606-EIP,我们实现了输送…

OpenCV CUDA模块中矩阵操作------降维操作

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::reduce 函数用于对 GPU 上的矩阵沿某个维度进行降维操作,例如求和、取最大值等。此函数支持多种降维操作,并允…

一分钟用 MCP 上线一个 贪吃蛇 小游戏(CodeBuddy版)

我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 你好,我是悟空。 背景 上篇我们用 MCP 上线了一个 2048 小游戏,这次我们继续做一个 …

简单神经网络(ANN)实现:从零开始构建第一个模型

本文将手把手带你用 Python Numpy 实现一个最基础的人工神经网络(Artificial Neural Network, ANN)。不依赖任何深度学习框架,适合入门理解神经网络的本质。 一、项目目标 构建一个三层神经网络(输入层、隐藏层、输出层&#xf…

使用python进行人员轨迹跟踪

一、系统概述 该系统基于计算机视觉技术,实现对视频或摄像头画面中的人员进行检测、跟踪,并生成轨迹数据。支持透视变换校准(鸟瞰图显示)、多目标跟踪、轨迹存储及视频录制功能,适用于安防监控、行为分析等场景。 二…

[强化学习的数学原理—赵世钰老师]学习笔记02-贝尔曼方程

本人为强化学习小白,为了在后续科研的过程中能够较好的结合强化学习来做相关研究,特意买了西湖大学赵世钰老师撰写的《强化学习数学原理》中文版这本书,并结合赵老师的讲解视频来学习和更深刻的理解强化学习相关概念,知识和算法技…

Docker入门指南:镜像、容器与仓库的核心概念解析

目录 前言:为什么需要Docker? 一、Docker能做什么? 二、核心概念解析 1. 镜像(Image):应用的标准化打包 2. 容器(Container):镜像的运行实例 3. 镜像仓库&#xff0…

大模型微调实战:基于GpuGeek平台的低成本高效训练方案

文章目录 引言一、GpuGeek平台使用入门1. 注册与账号设置2. 控制台功能概览3. 快速创建GPU实例3. 预置镜像与自定义环境 二、GpuGeek平台核心优势解析1. 显卡资源充足:多卡并行加速训练2. 镜像超多:开箱即用的开发环境3. 计费灵活:按需付费降…

Linux:计算机的层状结构

1.冯诺依曼体系结构 我们常见的计算机,如笔记本、台式机。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系结构。 CPU:运算器和控制器组成。运算器主要工作是做算术运算和逻辑运算。控制器主要工作是协调设备之间信息流动的…

LangGraph(四)——加入人机交互控制

目录 1. 引言2. 添加Human Assistance工具3. 编译状态图4. 提示聊天机器人5. 恢复执行参考 1. 引言 智能体可能不可靠,甚至需要人工输入才能完成任务。同样,对于某些操作,你可能需要在运行前获得人工批准,以保证一切按预期运行。 …

数据结构【AVL树】

AVL树 1.AVL树1.AVL的概念2.平衡因子 2.AVl树的实现2.1AVL树的结构2.2AVL树的插入2.3 旋转2.3.1 旋转的原则 1.AVL树 1.AVL的概念 AVL树可以是一个空树。 它的左右子树都是AVL树,且左右子树的高度差的绝对值不超过1。AVL树是一颗高度平衡搜索二叉树,通…

JavaScript【5】DOM模型

1.概述: DOM (Document Object Model):当页面被加载时,浏览器会创建页面的文档对象模型,即dom对象;dom对象会被结构化为对象树,如一个HTML文档会被分为head,body等部分,而每个部分又…

STM32烧录程序正常,但是运行异常

一、硬件配置问题 BOOT引脚设置错误 STM32的启动模式由BOOT0和BOOT1引脚决定。若设置为从RAM启动(BOOT01,BOOT10),程序在掉电后无法保存,导致复位后无法正常运行。应确保BOOT00(从Flash启动)15。…

汽车二自由度系统模型以及电动助力转向系统模型

汽车二自由度系统模型与电动助力转向系统(EPS)的详细建模方案,包含理论推导、MATLAB/Simulink实现代码及参数说明: 一、二自由度汽车模型 1. 模型描述 包含以下两个自由度: 横向运动(侧向加速度&#xf…

git提交库常用词

新功能 feat修改BUG fix文档修改 docs格式修改 style重构 refactor性能提升 perf测试 test构建系统 build对CI配置文件修改 ci修改构建流程、或增加依赖库、工具 chore回滚版本 revert

JavaScript 时间转换:从 HH:mm:ss 到十进制小时及反向转换

关键点 JavaScript 可以轻松实现时间格式(HH:mm:ss 或 HH:mm)与十进制小时(如 17.5)的相互转换。两个函数分别处理时间字符串到十进制小时,以及十进制小时到时间字符串的转换,支持灵活的输入和输出格式。这…