Как проверить, включено ли перераспределение памяти ядра в Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять настройку перераспределения виртуальной памяти (virtual memory overcommit) в Linux. Вы будете использовать команду 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"}} linux/ls -.-> lab-558796{{"Как проверить, включено ли перераспределение памяти ядра в Linux"}} linux/cat -.-> lab-558796{{"Как проверить, включено ли перераспределение памяти ядра в Linux"}} linux/env -.-> lab-558796{{"Как проверить, включено ли перераспределение памяти ядра в Linux"}} end

Проверка перераспределения памяти с помощью sysctl vm.overcommit

На этом этапе вы научитесь проверять настройку перераспределения виртуальной памяти (virtual memory overcommit) в Linux с использованием команды sysctl.

Перераспределение виртуальной памяти (virtual memory overcommit) - это функция в Linux, которая позволяет системе выделять процессам больше памяти, чем физически доступно. Это может быть полезно в некоторых случаях, но также может привести к проблемам, если процессы действительно попытаются использовать всю выделенную им память.

Команда sysctl используется для просмотра и изменения параметров ядра во время выполнения. Мы будем использовать ее для проверки значения параметра vm.overcommit_memory.

Если вы еще не открыли терминал, сделайте это. Для этого нажмите на значок Xfce Terminal слева на рабочем столе.

Теперь введите следующую команду в терминал и нажмите Enter:

sysctl vm.overcommit_memory

Эта команда просит ядро показать текущее значение параметра vm.overcommit_memory.

Вы должны увидеть вывод, похожий на следующий:

vm.overcommit_memory = 0

Значение 0 указывает на использование стандартной эвристической обработки перераспределения памяти. Другие возможные значения: 1 (всегда перераспределять память) и 2 (никогда не перераспределять память). Понимание этой настройки важно для производительности и стабильности системы, особенно в средах с высокими требованиями к памяти.

Нажмите Продолжить, чтобы перейти к следующему шагу.

Проверка настроек в /proc/sys/vm

На этом этапе вы исследуете файловую систему /proc, в частности директорию /proc/sys/vm, чтобы увидеть, как параметры ядра, связанные с виртуальной памятью, представлены в системе.

Файловая система /proc - это виртуальная файловая система, которая предоставляет информацию о процессах и другой системной информации. Это отличное место для проверки текущего состояния ядра. Директория /proc/sys внутри /proc содержит файлы, соответствующие параметрам ядра, которые можно просматривать и иногда изменять во время выполнения.

Директория /proc/sys/vm содержит файлы, связанные с подсистемой виртуальной памяти. Параметр vm.overcommit_memory, который мы проверили на предыдущем этапе, имеет соответствующий файл в этой директории.

Давайте используем команду cat для просмотра содержимого файла, представляющего vm.overcommit_memory. Команда cat используется для отображения содержимого файлов.

Введите следующую команду в терминал и нажмите Enter:

cat /proc/sys/vm/overcommit_memory

Эта команда прочитает содержимое файла overcommit_memory, расположенного в /proc/sys/vm, и выведет его в терминал.

Вы должны увидеть то же значение, которое вы видели с помощью команды 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.

Введите следующую команду в терминал и нажмите Enter:

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 является важной частью настройки системы на постоянной основе.

Нажмите Продолжить, чтобы завершить этот практический урок.

Резюме

В этом практическом уроке вы узнали, как проверить настройку перераспределения виртуальной памяти (virtual memory overcommit) в Linux. Вы использовали команду sysctl vm.overcommit_memory для просмотра текущего значения этого параметра ядра, понимая, что значение 0 означает использование стандартного эвристического подхода, 1 - всегда разрешать перераспределение, а 2 - никогда не разрешать перераспределение.

Вы также исследовали файловую систему /proc, в частности директорию /proc/sys/vm, чтобы увидеть, как параметры ядра, такие как vm.overcommit_memory, представлены в виде файлов в этой виртуальной файловой системе, что дает альтернативный способ проверки текущего состояния ядра в отношении настроек виртуальной памяти.