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

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

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

Введение

В этом практическом занятии (лабораторной работе) мы рассмотрим, как проверить и понять ограничения памяти ядра в Linux. Мы сосредоточимся на настройке vm.overcommit_memory, которая контролирует, как ядро обрабатывает запросы на выделение памяти.

Путем практических действий вы научитесь использовать команду sysctl для просмотра и временной модификации этого параметра ядра, проверять настройки памяти, исследуя каталог /proc/sys/vm, и определять постоянные файлы конфигурации ядра в /etc/sysctl.d. В рамках этого практического занятия вы получите практический опыт в управлении и понимании поведения памяти в Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/SystemInformationandMonitoringGroup -.-> linux/service("Service Managing") linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") linux/UserandGroupManagementGroup -.-> linux/export("Variable Exporting") subgraph Lab Skills linux/ls -.-> lab-558795{{"Как проверить, установлены ли ограничения памяти ядра в Linux"}} linux/cat -.-> lab-558795{{"Как проверить, установлены ли ограничения памяти ядра в Linux"}} linux/service -.-> lab-558795{{"Как проверить, установлены ли ограничения памяти ядра в Linux"}} linux/env -.-> lab-558795{{"Как проверить, установлены ли ограничения памяти ядра в Linux"}} linux/export -.-> lab-558795{{"Как проверить, установлены ли ограничения памяти ядра в Linux"}} end

Проверка ограничений памяти с использованием sysctl vm.overcommit

На этом этапе мы рассмотрим, как Linux управляет выделением памяти, с особым вниманием к настройке vm.overcommit_memory с помощью команды sysctl.

Команда sysctl используется для изменения параметров ядра во время выполнения. Эти параметры обычно хранятся в каталоге /proc/sys/. Параметр vm.overcommit_memory контролирует, как ядро обрабатывает запросы на выделение памяти, превышающие доступный физический RAM.

Для vm.overcommit_memory существует три возможных значения:

  • 0: Гибридный перевыделение (heuristic overcommit). Ядро пытается оценить, возможен ли запрос на выделение памяти. Это значение является настройкой по умолчанию.
  • 1: Всегда перевыделять (always overcommit). Ядро всегда удовлетворяет запросы на выделение памяти, даже если они превышают доступную память. Это может привести к тому, что процессы будут завершены позже, если они действительно попытаются использовать эту память.
  • 2: Никогда не перевыделять (never overcommit). Ядро не удовлетворит запросы на выделение памяти, если они превышают общую доступную своп-память плюс настраиваемый процент от физического RAM.

Давайте проверим текущее значение vm.overcommit_memory. Откройте терминал и введите следующую команду:

sysctl vm.overcommit_memory

Нажмите Enter.

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

vm.overcommit_memory = 0

Этот вывод показывает, что текущая настройка vm.overcommit_memory равна 0, что означает, что ядро использует гибридный перевыделение памяти.

Понимание этой настройки важно для управления системными ресурсами и предотвращения ошибок нехватки памяти в определенных приложениях.

Теперь давайте попробуем временно изменить это значение. Мы можем сделать это, используя команду sudo sysctl -w. Флаг -w позволяет записать новое значение в параметр ядра.

Введите следующую команду, чтобы установить vm.overcommit_memory равным 1:

sudo sysctl -w vm.overcommit_memory=1

Нажмите Enter.

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

vm.overcommit_memory = 1

Теперь давайте снова проверим значение, чтобы убедиться, что оно изменилось:

sysctl vm.overcommit_memory

Нажмите Enter.

Теперь вывод должен показать:

vm.overcommit_memory = 1

Обратите внимание, что изменения, сделанные с помощью sysctl -w, являются временными и будут сброшены при перезапуске системы. В следующих шагах мы рассмотрим, как сделать эти изменения постоянными.

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

Проверка настроек памяти в /proc/sys/vm

На предыдущем этапе мы использовали команду sysctl для проверки и изменения параметра ядра vm.overcommit_memory. Теперь давайте посмотрим, где эти параметры фактически хранятся в файловой системе.

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

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

Откройте терминал и введите следующую команду:

ls /proc/sys/vm/

Нажмите Enter.

Вы увидите список файлов, каждый из которых представляет собой параметр ядра, связанный с виртуальной памятью. Вывод будет похож на следующий (точный список файлов может немного отличаться в зависимости от версии ядра):

admin_reserve_kbytes            hugetlb_shm_group             oom_kill_allocating_task
block_dump                      laptop_mode                   oom_score_adj
compact_hueristics              lowmem_reserve_ratio          overcommit_memory
compact_memory                  max_map_count                 overcommit_ratio
... (много других файлов)

Обратите внимание на файл с именем overcommit_memory. Этот файл содержит текущее значение параметра vm.overcommit_memory, с которым мы работали на предыдущем этапе.

Мы можем использовать команду cat для просмотра содержимого этого файла. Помните, что на предыдущем этапе мы установили значение равным 1.

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

cat /proc/sys/vm/overcommit_memory

Нажмите Enter.

Вывод должен быть следующим:

1

Это подтверждает, что значение, установленное с помощью sysctl -w, отображается в файле /proc/sys/vm/overcommit_memory.

Вы также можете просмотреть другие параметры, связанные с памятью, в этом каталоге, используя команду cat. Например, чтобы посмотреть коэффициент перевыделения памяти (overcommit ratio):

cat /proc/sys/vm/overcommit_ratio

Нажмите Enter.

Вывод покажет текущий коэффициент перевыделения памяти, который используется, когда vm.overcommit_memory установлен в значение 2.

50

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

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

Проверка конфигурации sysctl в /etc/sysctl.d

На предыдущих этапах мы узнали, как проверять и временно изменять параметры ядра с помощью sysctl и как эти параметры отражаются в файловой системе /proc/sys. Однако изменения, сделанные с помощью sysctl -w, не являются постоянными. Чтобы изменения параметров ядра сохранялись после перезагрузки системы, необходимо настроить их в специальных конфигурационных файлах.

Основное место для постоянных конфигураций sysctl - это файл /etc/sysctl.conf. Кроме того, в системах Linux часто используется каталог /etc/sysctl.d/ для хранения фрагментов конфигурации в отдельных файлах. Такой модульный подход упрощает управление конфигурациями для разных приложений или компонентов системы.

Давайте проверим содержимое каталога /etc/sysctl.d/. Мы можем использовать команду ls для вывода списка файлов в этом каталоге.

Откройте терминал и введите следующую команду:

ls /etc/sysctl.d/

Нажмите Enter.

Вы увидите список конфигурационных файлов. Обычно эти файлы имеют расширение .conf. Вывод может выглядеть примерно так:

10-console-messages.conf  10-kernel-hardening.conf  10-tcp-congestion-control.conf  99-sysctl.conf

Каждый из этих файлов может содержать настройки параметров sysctl в формате parameter = value. При загрузке системы она считывает /etc/sysctl.conf, а затем все файлы в /etc/sysctl.d/ в алфавитном порядке, чтобы применить постоянные настройки параметров ядра.

Давайте посмотрим на содержимое одного из этих конфигурационных файлов, например, 10-kernel-hardening.conf. Мы можем использовать команду cat для отображения его содержимого.

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

cat /etc/sysctl.d/10-kernel-hardening.conf

Нажмите Enter.

Вы увидите параметры ядра, настроенные в этом файле. Содержимое может различаться, но оно может включать настройки, связанные с безопасностью или поведением системы.

#
## sysctl settings for kernel hardening
#

## Disable unprivileged user namespaces
kernel.unprivileged_userns_clone=0

## Protect against symlink attacks
fs.protected_hardlinks=1
fs.protected_symlinks=1

## Disable kexec
kernel.kexec_load_disabled=1

## Disable bpf JIT
net.core.bpf_jit_enable=0

## Disable ptrace access to other processes
kernel.yama.ptrace_scope=1

Вы можете увидеть, как здесь настраиваются параметры ядра, такие как kernel.unprivileged_userns_clone и fs.protected_hardlinks.

Чтобы сделать нашу настройку vm.overcommit_memory=1 постоянной, обычно нужно добавить строку vm.overcommit_memory = 1 в новый или существующий файл в /etc/sysctl.d/ (или в /etc/sysctl.conf). Однако в рамках этого вводного практического занятия мы не будем делать это изменение постоянным.

Понимание каталога /etc/sysctl.d/ является важным для настройки постоянных параметров ядра в вашей системе Linux.

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

Резюме

В этом практическом занятии мы научились проверять и понимать ограничения памяти ядра в Linux, с особым вниманием уделив настройке vm.overcommit_memory. Мы использовали команду sysctl для просмотра текущего значения этого параметра, который контролирует, как ядро обрабатывает запросы на выделение памяти, превышающие доступный физический RAM. Мы изучили три возможных значения (0, 1 и 2) и их влияние на управление памятью. Мы также практиковались во временном изменении значения vm.overcommit_memory с помощью команды sudo sysctl -w.

Кроме того, мы проверили настройки памяти ядра, изучив каталог /proc/sys/vm, который предоставляет файловый интерфейс к параметрам ядра. Мы также научились определять постоянные конфигурации параметров ядра, исследуя файлы в каталоге /etc/sysctl.d. Эти шаги позволили получить всестороннее понимание того, как проверять и находить настройки ограничений памяти ядра в среде Linux.