установка предела стека с помощью ulimit в ядре 5.x

#linux #stack #kernel #limit

Вопрос:

Обнаружилась очень странная ситуация.

установка ulimit с помощью команды ulimit:

 ulimit -s 5100000
ulimit -c 1000000
ulimit -n 4096
 

проверка улимита — все хорошо

 [lt@lt-hkg1-tsr01 ~]$ ulimit -a
core file size          (blocks, -c) 1000000
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 255870
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 4096
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 5100000
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
[lt@lt-hkg1-tsr01 ~]$ 
 

теперь проверяем ulimit через cgexec

 [lt@lt-hkg1-tsr03 ~]$ cgexec -g cpuset:/lt/default /bin/bash -c "ulimit -a"
core file size          (blocks, -c) 1000000
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 1031435
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 4096
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
[lt@lt-hkg1-tsr03 ~]$ 
 

как вы можете видеть, основные файлы и открытые файлы верны
, но размер стека возвращается к значению по умолчанию (даже у меня другое значение в файле /etc/security/limits.conf).

Я обнаружил, что это относится к ядру 5.x (5.4 / 5.10 /5.12) но работал, как и ожидалось, в 3.x и 4.x

Это ошибка или функция?

Комментарии:

1. я обнаружил, что удаление setgid из cgexec делает поведение таким, каким оно было раньше. все еще не знаю ошибку или функцию