Вопрос или проблема
Пытаясь постоянно изменить некоторые параметры ядра vm, я создал файл конфигурации /etc/sysctl.d/01-custom.conf
, как описано в статье базы знаний Red Hat. Вот его содержимое:
# cat /etc/sysctl.d/01-custom.conf
vm.swappiness=10
vm.dirty_ratio=20
vm.vfs_cache_pressure=200
Однако после перезагрузки только vm.vfs_cache_pressure
изменился, а swappiness
и dirty_ratio
имеют предыдущие значения.
# sysctl vm.swappiness
vm.swappiness = 30
# sysctl vm.dirty_ratio
vm.dirty_ratio = 30
В файле /etc/sysctl.conf
никаких изменений для параметра vm.dirty_ratio
нет, а vm.swappiness
также установлен на 10. Значит ли это, что система берет эти значения откуда-то еще? В каталоге /etc/sysctl.d
нет других конфигурационных файлов, кроме моего, и ссылки на /etc/sysctl.conf
:
# ll /etc/sysctl.d/
total 4
-rw-r--r-- 1 root root 147 May 30 04:40 01-custom.conf
lrwxrwxrwx. 1 root root 14 Apr 3 15:00 99-sysctl.conf -> ../sysctl.conf
Обновление:
sysctl --system
показывает, что значения из моей конфигурации были приняты. Ничего для vm.swappiness
и vm.dirty_ratio
установлено на 30.
Если вы запускаете tuned, он будет иметь преимущество над sysctl: Параметры sysctl.conf могут быть переопределены Tuned
Проверьте, запущен ли tuned:
systemctl status tuned
Если он запущен, проверьте, какой профиль активен:
tuned-adm active
Профили Tuned можно найти в /usr/lib/tuned/:
# grep -ri '^vm.swappiness' /usr/lib/tuned/
/usr/lib/tuned/latency-performance/tuned.conf:vm.swappiness=10
/usr/lib/tuned/throughput-performance/tuned.conf:vm.swappiness=10
/usr/lib/tuned/virtual-guest/tuned.conf:vm.swappiness = 30
В стандартном файле /etc/sysctl.conf на сервере CentOS 7 есть комментарий:
# Параметры sysctl определяются через файлы в
# /usr/lib/sysctl.d/, /run/sysctl.d/, и /etc/sysctl.d/.
#
# Настройки поставщиков находятся в /usr/lib/sysctl.d/.
# Чтобы переопределить целый файл, создайте новый файл с таким же именем
# в /etc/sysctl.d/ и поместите новые настройки туда. Чтобы переопределить
# только конкретные настройки, добавьте файл с лексически более поздним
# именем в /etc/sysctl.d/ и поместите новые настройки туда.
Вы можете искать эти каталоги для конкретных настроек.
Ответ или решение
При попытке постоянного изменения параметров ядра в RHEL7, многие администраторы сталкиваются с проблемой, когда выставленные значения не сохраняются после перезагрузки системы. В данном случае, было создано конфигурационное файл /etc/sysctl.d/01-custom.conf
, содержащий настройки для некоторых параметров управления памятью. Однако, несмотря на это, после перезагрузки системы значения vm.swappiness
и vm.dirty_ratio
остались прежними. В данном ответе будет рассмотрено, как выявить причины данной проблемы и что можно сделать для их устранения.
Основные параметры
Вот содержимое созданного конфигурационного файла:
# cat /etc/sysctl.d/01-custom.conf
vm.swappiness=10
vm.dirty_ratio=20
vm.vfs_cache_pressure=200
После перезагрузки система не применяет значения для параметров vm.swappiness
(30 вместо 10) и vm.dirty_ratio
(30 вместо 20). Данный факт указывает на возможность наличия других конфигураций, которые переопределяют эти значения.
Проверка других конфигураций
Первым шагом является проверка системы на наличие других файлов конфигурации, которые могут переопределять ваши значения. В стандартной конфигурации Flux 2 (CentOS/RHEL 7) параметры ядра идут из нескольких мест:
/usr/lib/sysctl.d/
/run/sysctl.d/
/etc/sysctl.d/
В этих директориях могут находиться файлы с настройками от поставщиков или системные настройки, которые могут переопределять ваши значения. Вы можете просмотреть файлы иgrep для параметров swappiness
и dirty_ratio
:
grep -r 'vm.swappiness' /usr/lib/sysctl.d/ /etc/sysctl.d/
grep -r 'vm.dirty_ratio' /usr/lib/sysctl.d/ /etc/sysctl.d/
Влияние Tuned
Также возможно, что запущенный сервис tuned
может влиять на значения параметров sysctl
. Tuned – это инструмент для динамической настройки параметров системы в соответствии с профилем производительности. Чтобы проверить, активно ли управление Tuned, выполните следующую команду:
systemctl status tuned
Если сервис запущен, то посмотрите, какой профиль в данный момент активен:
tuned-adm active
При активном Tuned, вы можете проверить, какие значения параметров swappiness
и dirty_ratio
указаны в текущем профиле. Например, просмотрев файлы конфигурации в /usr/lib/tuned/
, можно найти строки, которые определяют параметры управления памятью.
Изменение параметров Tuned
Если Tuned действительно переопределяет ваши настройки, у вас есть несколько вариантов:
-
Изменить активный профиль Tuned на более подходящий:
tuned-adm profile throughput-performance
-
Создать собственный профиль Tuned и указать в нём необходимые параметры.
-
Отключить Tuned, если он вам не нужен:
systemctl stop tuned systemctl disable tuned
Заключение
В третьем шаге вы также можете редактировать файл /etc/sysctl.conf
, если хотите, чтобы ваши параметры находились в одном месте. Важно помнить, что при изменении конфигурации параметров ядра через Tuned, следует анализировать, как это повлияет на производительность системы или приложений. Понимание взаимодействия между разными конфигурациями и способами их применения поможет вам обеспечить стабильность и производительность вашего серверного окружения.
Правильное определение и конфигурирование параметров системы позволяет оптимизировать её работу и избежать нежелательных проблем после перезагрузки.