如何以持久性和非持久性方式更改内核运行时参数?

linuxoperating systemopen source

简介

内核运行时参数是控制系统上 Linux 内核行为的设置。这些参数会影响各种系统功能,例如内存分配、网络性能和 CPU 调度。

了解如何更改这些参数对于优化系统性能和排除可能出现的问题至关重要。更改内核运行时参数主要有两种方式:非持久性更改和持久性更改。

非持久性更改会暂时修改内核的行为,仅持续到您重新启动系统为止。另一方面,持久性更改会永久修改内核的行为,并在系统重启后持续存在。

以非持久性方式更改内核运行时参数

非持久性更改的定义及其工作原理

对内核运行时参数的非持久性更改是临时性的,这意味着它们在系统重启后会失效。您可以使用 sysctl 或 echo 等命令行工具进行这些更改。系统重启后,对内核运行时参数所做的更改将会丢失,系统将恢复为默认设置。

非持久性更改的一个主要优点是,它们允许快速测试不同的配置,而无需对系统进行任何永久性更改。这种灵活性也存在缺点,因为它需要管理员持续关注,以确保每次重启或服务重启后,任何所需的非持久性更改都已重新应用。

使用命令行工具进行非持久性更改的分步指南

以下步骤详细说明了如何使用命令行工具以非持久性方式更改内核运行时参数 -

  • 确定要修改的内核参数。

  • 打开终端并输入"sysctl -a"或"cat /proc/sys/[parameter_name]"(不带引号)以分别查看所有 sysctl 变量或单个参数的当前值。

sysctl –a

或

cat /proc/sys/[parameter_name]
  • 确定要更改的值,然后使用"echo [value] > /proc/sys/[parameter_name]"(不带引号)或"sysctl -w [parameter_name]=[value]"(不带引号),然后使用"sysctl -p"(应用所有待处理的设置)。

echo [value] > /proc/sys/[parameter_name]

或者

sysctl -w [parameter_name]=[value]

sysctl -p
  • 验证新值是否生效:再次使用"cat /proc/sys/[parameter_name]"或尝试使用新设置运行应用程序。

可以非持久化方式更改的常见内核运行时参数示例

以下是一些可以使用上述过程以非持久化方式更改的内核运行时参数示例 -

  • net.ipv4.tcp_syncookies - 设置为 0 以禁用 SYN cookie,SYN cookie 用于防御某些类型的拒绝服务攻击。

  • vm.swappiness - 控制内核优先交换非活动进程而不是回收内存中文件支持页面的程度。

  • net.ipv4.ip_forward - 设置为1 在充当路由器的节点上启用 IP 转发。

  • kernel.sem − 调整 System V IPC 信号量、消息队列和共享内存段的最大值。

  • fs.file-max − 设置系统范围内可用的最大文件句柄数。

通过以非持久性方式更改这些参数,管理员可以尝试不同的配置,并在永久提交任何更改之前确定最适合其系统的配置。

以持久性方式更改内核运行时参数

持久性更改的定义及其与非持久性更改的区别

对内核运行时参数进行持久性更改意味着即使系统重新启动后,更改仍将保留。这些更改保存在配置文件中,因此可以在系统初始化时自动加载。这与非持久性更改不同,非持久性更改仅临时修改内核设置,并在系统重启后恢复到原始值。

持久性更改有助于对需要在多次重启后保持一致的内核设置进行长期修改。此外,可以通过配置文件进行持久性更改,这对于在多个系统上自动执行配置非常有用。

使用配置文件进行持久性更改的分步指南

要使用配置文件进行持久性更改,您需要修改要更改的参数的相应配置文件。通常,这些配置文件位于 /etc/sysctl.d/ 目录中。以下是有关如何执行此操作的分步指南 -

  • 打开终端窗口并输入"sudo su"切换到 root 用户。

  • 输入"cd /etc/sysctl.d/"导航到 /etc/sysctl.d/ 目录。

  • 使用您喜欢的文本编辑器(例如 nano)在此目录中创建一个扩展名为".conf"的新文件,方法是输入"nano filename.conf"。

  • 将所需的内核运行时参数及其对应的值添加到此文件中(每行一个参数-值对)。

例如 -

net.ipv4.tcp_fin_timeout=30 
vm.swappiness=10  
  • 按 CTRL+X,然后按 Y,最后按 ENTER 保存并关闭文件。

  • 使用命令"sysctl --system"刷新 sysctl 设置。执行这些步骤后,持久化内核运行时参数更改将保存到配置文件中,并在重启后仍然有效。

可持久化更改的常见内核运行时参数示例

许多内核运行时参数可以通过配置文件持久化更改。以下是一些常见示例 -

  • net.ipv4.tcp_fin_timeout - 此参数控制连接关闭后保持 TIME_WAIT 状态的时间。默认值通常为 60 秒,但可以缩短此时间以加快连接关闭速度。

  • vm.swappiness − 此参数控制内核在 RAM 和交换空间之间交换内存页面的积极程度。较低的值(例如 10)会导致较少的交换并增加物理内存的使用量,而较高的值(例如 60)会导致较多的交换并减少物理内存的使用量。

  • fs.file-max − 此参数设置系统中可同时打开的最大文件数。对于文件 I/O 需求较高的系统,增加此值会很有帮助。

总体而言,对于想要长期修改系统行为的系统管理员来说,使用配置文件以持久的方式更改内核运行时参数是一项重要技能。通过遵循这些步骤,您可以确保每次系统启动时自动加载配置,从而减少手动干预并节省时间。

更改内核运行时参数的最佳实践

更改内核运行时参数会对系统性能和稳定性产生重大影响。为了避免问题并确保更改有效,在进行更改时遵循最佳实践至关重要。本节将介绍一些关键的最佳实践。

实施更改前测试的重要性

在实施任何更改之前,务必在非生产环境中测试这些更改。这样可以在将更改应用于生产系统之前识别任何问题或冲突。测试应包括验证系统在更改后是否按预期运行。

关于何时使用非持久性更改与持久性更改的讨论

选择进行非持久性还是持久性内核运行时参数更改,很大程度上取决于更改的预期范围及其潜在影响。非持久性更改适用于无需在系统重启之间维护的临时修改,而持久性更改更适合需要在重启后持续存在的长期修改。

结论

更改内核运行时参数是优化系统性能和功能的有力工具。通过了解非持久性更改和持久性更改之间的差异,用户可以做出明智的决定,选择适合其特定需求的方法。请务必牢记,对这些参数所做的任何更改都应在生产系统上实施之前进行彻底测试。

在本文中,我们介绍了使用命令行工具和配置文件进行非持久性和持久性更改的分步过程。我们还讨论了更改内核运行时参数的最佳实践,并提供了故障排除可能出现的潜在问题的技巧。


相关文章


有用资源