Мне просто интересно, где эти значения устанавливаются и какие они по умолчанию? У меня в настоящее время 18446744073692774399. Я нигде не устанавливал его, чтобы видеть.

$ cat /proc/sys/kernel/shmmax 
18446744073692774399

$ sysctl kernel.shmmax
kernel.shmmax = 18446744073692774399
10
Evan Carroll 14 Июн 2017 в 03:47

2 ответа

Лучший ответ

Функция __init ipc_ns_init устанавливает начальное значение shmmax, вызывая shm_init_ns, который устанавливает для него значение макроса SHMMAX.

Определение SHMMAX находится в <uapi/linux/shm.h>:

#define SHMMAX (ULONG_MAX - (1UL << 24)) /* max shared seg size (bytes) */

На 64-битных машинах это определение равно найденному вами значению 18446744073692774399.

9
user41515user41515 14 Июн 2017 в 05:40

На лету вы можете просто выполнить эхо в /proc/sys/kernel/shmmax!

# echo 20446744073692774399 > /proc/sys/kernel/shmmax

Но большинство людей редактируют /etc/sysctl.conf строкой, похожей на:

kernel.shmmax=your_new_value_here

См. справочную страницу sysctl(8).

2
Deathgrip 14 Июн 2017 в 04:47
Это не вопрос. Где установлены значения по умолчанию? То есть, если вы сами не пишете в shmmax, что он делает по умолчанию?
 – 
Evan Carroll
14 Июн 2017 в 05:09
2
В некоторых дистрибутивах Linux (я полагаю, RHEL 5 и 6) он установлен в /etc/sysctl.conf. Но я думаю, что по умолчанию в коде ядра установлен теоретический предел (угадайте, что это 2 ^ 64 - 1?).
 – 
Deathgrip
14 Июн 2017 в 05:48