![SHMMAX + как влияет на параметр ядра, который был установлен неправильно по ошибке](https://rvso.com/image/154472/SHMMAX%20%2B%20%D0%BA%D0%B0%D0%BA%20%D0%B2%D0%BB%D0%B8%D1%8F%D0%B5%D1%82%20%D0%BD%D0%B0%20%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%20%D1%8F%D0%B4%D1%80%D0%B0%2C%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B9%20%D0%B1%D1%8B%D0%BB%20%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%20%D0%BD%D0%B5%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%20%D0%BF%D0%BE%20%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B5.png)
несколько слов о совместной памяти
Общая память позволяет процессам получать доступ к общим структурам и данным, помещая их в сегменты общей памяти. Это самая быстрая из доступных форм межпроцессного взаимодействия, поскольку при передаче данных между процессами не происходит никакого участия ядра. Фактически, данные не нужно копировать между процессами.
мы замечаем, что ценность машин RedHat огромна, как показано ниже
cat /proc/sys/kernel/shmmax
17446744003692774391
sysctl -a | grep kernel.shmmax
kernel.shmmax = 17446744003692774391
когда я рассчитал до Гига его - 16248546544.17632
логично ли это? , мы что-то упускаем здесь
Машины имеют 64G и 16 CPU и используются в кластере Hadoop.
решение1
Theзначение по умолчаниюдля shmmax
есть
#define SHMMAX (ULONG_MAX - (1UL << 24))
Это верхняя граница, выбранная так, чтобы быть максимально большой, ограничивая при этом риск переполнения:
SHMMNI, SHMMAX и SHMALL — верхние пределы по умолчанию, которые можно изменить с помощью sysctl. Значения SHMMAX и SHMALL были выбраны максимально большими, не упрощая сценарии, в которых пользовательское пространство вызывает переполнение при настройке пределов с помощью операций вида «извлечь текущий предел; добавить X; обновить предел». Поэтому не рекомендуется увеличивать SHMMAX и SHMALL. Эти пределы подходят как для 32-, так и для 64-разрядных систем.
Значение в порядке и так; оно установлено правильно, ошибок нет.