Всем привет. Появилась проблема, уже всё перепробовал, может вы подскажете. Есть сервер с 32 ядрами и 128гб рамы. Есть некий софт, который на 1 процесс плодит 10к открытий файлов. Запускаю несколько сотен этих процессов - и всё валится по лимиту на открытие файлов. По lsof получается открытых файлов всего в системе около 2.5 млн.
В sysctl:
fs.file-max = 30000000
ulimit -a :
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 514786
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1000000
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) 514786
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Хочу выставить hard-лимит открытых файлов в 10 млн и получаю ошибку:
ulimit -Hn 10000000
-bash: ulimit: open files: cannot modify limit: Operation not permitted
security.limit:
* soft nproc 1000000
* hard nproc 1000000
* - nofile 10000000
root - nofile 10000000
worker - nofile 10000000
worker1 - nofile 10000000
* - memlock unlimited
Так же по наступлению лимита баш при использовании пайпов говорит что не может форкнуться. Я что-то не так делаю, или чего-то не понимаю? Или ещё где-то выше захардкожен в ядре лимит?
Всем буду очень благодарен за помощь.
PS файлы открываются в /dev/shm/, так что сервер всё это дело сильно не должно нагружать. Уменьшать количество открытий файлов тоже не вариант, т.к. по сути эти открытия создаёт блоб, который сложно расковырять.