如何检查 Linux 中内核过度使用(overcommit)是否启用

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何检查 Linux 中的虚拟内存过度使用(overcommit)设置。你将使用 sysctl 命令查看 vm.overcommit_memory 内核参数,并了解其不同的值。

你还将探索 /proc 文件系统,特别是 /proc/sys/vm 目录,以了解内核参数是如何以文件形式呈现的。最后,你将检查 /etc/sysctl.conf 文件,了解如何持久地配置这些设置。这个实验将让你通过实践,了解如何在 Linux 环境中验证和理解内核过度使用设置。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") subgraph Lab Skills linux/echo -.-> lab-558796{{"如何检查 Linux 中内核过度使用(overcommit)是否启用"}} linux/ls -.-> lab-558796{{"如何检查 Linux 中内核过度使用(overcommit)是否启用"}} linux/cat -.-> lab-558796{{"如何检查 Linux 中内核过度使用(overcommit)是否启用"}} linux/env -.-> lab-558796{{"如何检查 Linux 中内核过度使用(overcommit)是否启用"}} end

使用 sysctl vm.overcommit 检查过度使用设置

在这一步中,你将学习如何使用 sysctl 命令检查 Linux 中的虚拟内存过度使用(overcommit)设置。

虚拟内存过度使用是 Linux 中的一项功能,它允许系统为进程分配比物理可用内存更多的内存。在某些情况下,这可能是有益的,但如果进程实际尝试使用它们所分配的所有内存,也可能会导致问题。

sysctl 命令用于在运行时查看和修改内核参数。我们将使用它来检查 vm.overcommit_memory 参数的值。

如果你还没有打开终端,请打开它。你可以通过点击桌面左侧的 Xfce Terminal 图标来打开终端。

现在,在终端中输入以下命令并按回车键:

sysctl vm.overcommit_memory

此命令要求内核显示 vm.overcommit_memory 参数的当前值。

你应该会看到类似以下的输出:

vm.overcommit_memory = 0

0 表示默认的启发式过度使用处理方式。其他可能的值包括 1(始终过度使用)和 2(从不过度使用)。理解此设置对于系统性能和稳定性非常重要,特别是在内存需求较高的环境中。

点击 继续 进入下一步。

验证 /proc/sys/vm 中的设置

在这一步中,你将探索 /proc 文件系统,特别是 /proc/sys/vm 目录,以了解与虚拟内存相关的内核参数是如何呈现的。

/proc 文件系统是一个虚拟文件系统,它提供有关进程和其他系统信息。这是检查内核当前状态的好地方。/proc 中的 /proc/sys 目录包含与内核参数对应的文件,这些参数可以在运行时查看,有时还可以修改。

/proc/sys/vm 目录包含与虚拟内存子系统相关的文件。我们在上一步中检查的 vm.overcommit_memory 参数在这个目录中有对应的文件。

让我们使用 cat 命令来查看表示 vm.overcommit_memory 的文件内容。cat 命令用于显示文件内容。

在终端中输入以下命令并按回车键:

cat /proc/sys/vm/overcommit_memory

此命令将读取 /proc/sys/vm 目录下的 overcommit_memory 文件内容,并将其打印到终端。

你应该会看到与上一步使用 sysctl 命令时相同的值:

0

这表明 sysctl 本质上是从 /proc/sys 文件系统中的这些文件读取或写入数据。

你还可以列出 /proc/sys/vm 目录中的文件,以查看其他与虚拟内存相关的参数。使用 ls 命令:

ls /proc/sys/vm/

你将看到一个文件列表,每个文件代表一个与虚拟内存相关的不同内核参数。

compact_hueristic
compact_memory
dirty_background_bytes
dirty_background_ratio
dirty_bytes
dirty_expire_centisecs
dirty_ratio
dirty_writeback_centisecs
drop_caches
extfrag_threshold
hugetlb_shm_group
laptop_mode
lowmem_reserve_ratio
min_free_bytes
min_slab_ratio
min_unmapped_ratio
mmap_min_addr
nr_hugepages
nr_hugepages_mempolicy
nr_overcommit_hugepages
numa_balancing
numa_balancing_scan_period_max_ms
numa_balancing_scan_period_min_ms
numa_balancing_scan_size_mb
numa_balancing_settle_count
numa_balancing_timeout
oom_dump_tasks
oom_kill_allocating_task
overcommit_memory
overcommit_ratio
page-cluster
panic_on_oom
percpu_pagelist_fraction
stat_interval
swappiness
user_reserve_kbytes
vfs_cache_pressure
watermark_boost_factor
watermark_scale_factor
zone_reclaim_mode

这让你了解到 Linux 内核虚拟内存子系统中许多可调整的参数。

点击 继续 进入下一步。

使用 cat /etc/sysctl.conf 检查配置

在这一步中,你将了解 /etc/sysctl.conf 文件,该文件用于跨重启持久地配置内核参数。

虽然你可以使用 sysctl 命令或通过写入 /proc/sys 中的文件在运行时更改内核参数,但这些更改通常是临时的,系统重启后就会丢失。要使内核参数更改永久生效,你通常需要将它们添加到 /etc/sysctl.conf 文件或 /etc/sysctl.d/ 目录中的文件中。

系统启动时,会从 /etc/sysctl.conf 读取设置并应用它们。

让我们再次使用 cat 命令来查看 /etc/sysctl.conf 文件的内容。

在终端中输入以下命令并按回车键:

cat /etc/sysctl.conf

这将显示主 sysctl 配置文件的内容。

你可能会看到以 # 开头的行,这些是注释,会被忽略。其他行的格式为 parameter = value,类似于你在 sysctl 命令输出中看到的那样。

#
## /etc/sysctl.conf - Configuration file for setting system variables
## See /etc/sysctl.d/ .conf files for other system variables
#

#kernel.domainname = example.com

## Uncomment the following to stop low-level messages on console
#kernel.printk = 3 4 1 3

##############################################################3
## Functions previously found in netbase
#

## Uncomment the next two lines to enable Spoofing attacks protection
#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1

## Uncomment the next line to enable TCP/IP SYN cookies
#net.ipv4.tcp_syncookies=1

## Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

## Uncomment the next line to enable packet forwarding for IPv6
#net.ipv6.conf.all.forwarding=1

##############################################################3
## Blow away nobody in the kernel
#

#kernel.yama.ptrace_scope = 1

##############################################################3
## Magic system request Key
#

#kernel.sysrq = 176

##############################################################3
## Dynamic Shared Memory:
#

#kernel.shmmax = 4294967295
#kernel.shmall = 268435456

##############################################################3
## Other settings
#

#fs.file-max = 100000

#vm.swappiness = 60
#vm.vfs_cache_pressure = 50

#kernel.nmi_watchdog = 0

注意,vm.overcommit_memory 参数可能未在该文件中明确设置。如果某个参数未在 /etc/sysctl.conf/etc/sysctl.d/ 中设置,内核将使用其默认值。你在 sysctl 命令和 /proc/sys/vm/overcommit_memory 中看到的值是当前活动的值,它可能是默认值,也可能是在启动期间由其他配置文件或脚本设置的。

理解 /etc/sysctl.conf 对于持久的系统调优至关重要。

点击 继续 完成此实验。

总结

在本实验中,你学习了如何检查 Linux 中的虚拟内存过度使用(overcommit)设置。你使用 sysctl vm.overcommit_memory 命令查看了该内核参数的当前值,了解到值为 0 表示默认的启发式处理,1 表示始终允许过度使用,2 表示从不允许过度使用。

你还探索了 /proc 文件系统,特别是 /proc/sys/vm 目录,了解了像 vm.overcommit_memory 这样的内核参数是如何在这个虚拟文件系统中以文件形式呈现的,这为检查内核在虚拟内存设置方面的当前状态提供了另一种方法。