Введение
В этом практическом занятии (лабораторной работе) мы рассмотрим, как проверить и понять ограничения памяти ядра в Linux. Мы сосредоточимся на настройке vm.overcommit_memory, которая контролирует, как ядро обрабатывает запросы на выделение памяти.
Путем практических действий вы научитесь использовать команду sysctl для просмотра и временной модификации этого параметра ядра, проверять настройки памяти, исследуя каталог /proc/sys/vm, и определять постоянные файлы конфигурации ядра в /etc/sysctl.d. В рамках этого практического занятия вы получите практический опыт в управлении и понимании поведения памяти в Linux.
Проверка ограничений памяти с помощью 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.



