Ситуация странная, потому что у меня есть 2 одинаковых сервера с одним и тем же приложением, но
на одном сервере я получаю ошибку ulimit из пользовательского приложения ошибка ulimit: слишком много открытых файлов но с другой он работает как положено.
Я действительно убедился, что конфигурация такая же, но я не могу понять, почему это происходит.
ФАКТЫ
/etc/systemd/system.conf
DefaultLimitNOFILE=100000000:100000000
/etc/systemd/user.conf
DefaultLimitNOFILE=10000000
/etc/security/limits.conf
Арсервер софт nproc 10000000
арсервер жесткий nproc 10000000
Арсервер софт nofile 10000000
Арсервер жесткий nofile 10000000
корень мягкий нпрок 10000000
корень жесткий nproc 10000000
корневой софт nofile 10000000
корень жесткий nofile 10000000
кошка /etc/sysctl.conf
сеть.core.rmem_default = 65536
net.core.wmem_default = 65536
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.ipv4.tcp_max_orphans = 4096
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_reordering = 3
net.ipv4.tcp_fastopen = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 32768 65535
vm.nr_hugepages = 1250
fs.file-max = 10000000
трассировка кошек | grep pam_limits
arserver@arserver03:/carmicli/carmi$ cat testlog1 | пределы grep
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/security/pam_limits.so", O_RDONLY|O_CLOEXEC) = 7
openat(AT_FDCWD, "/proc/1/limits", O_RDONLY) = 7
openat(AT_FDCWD, "/etc/security/limits.conf", O_RDONLY) = 7
read(7, "# /etc/security/limits.conf\n#\n#E"..., 4096) = 2345
openat(AT_FDCWD, "/etc/security/limits.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 7
openat(AT_FDCWD, "/proc/1/limits", O_RDONLY) = 7
openat(AT_FDCWD, "/etc/security/limits.conf", O_RDONLY) = 7
read(7, "# /etc/security/limits.conf\n#\n#E"..., 4096) = 2345
openat(AT_FDCWD, "/etc/security/limits.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 7
улимит -а
ulimit обновился в ulimit после перезагрузки но приложение все равно не запускается
arserver@arserver03:/carmicli/carmi$ ulimit -a
неблокирующее время в реальном времени (микросекунды, -R) неограниченно
размер основного файла (блоки, -c) 0
размер сегмента данных (кбайт, -d) не ограничен
приоритет планирования (-e) 0
размер файла (блоки, -f) не ограничен
ожидающие сигналы (-i) 1030919
макс. заблокированная память (кбайт, -l) 32998380
максимальный размер памяти (кбайт, -m) не ограничен
открывать файлы (-n) 1048576
размер канала (512 байт, -p) 8
Очереди сообщений POSIX (байты, -q) 819200
приоритет реального времени (-r) 0
размер стека (кбайт, -с) 8192
время процессора (секунды, -t) не ограничено
максимальное количество пользовательских процессов (-u) 10000000
виртуальная память (кбайт, -v) не ограничена
блокировка файлов (-x) не ограничена
Также создан сервис systemd, чтобы узнать, могу ли я переопределить глобальные ограничения, подобные этому.
[Ед. изм]
Description=Карми Шахтер
После=network.target
[Оказание услуг]
Пользователь=корень
Рабочий каталог=/приложение/карми/
ExecStart=/app/carmi/app.elf
Перезапуск = ненормальный
LimitNOFILE=1000000000
LimitNOFILESoft=1000000000
[Установить]
WantedBy=многопользовательская.цель
Но все равно не получается
08 апреля 14:19:45 arserver app.elf[3553]: ошибка ulimit: возможно, слишком много открытых файлов.
08 апреля 14:19:45 arserver systemd[1]: app.service: основной процесс завершен, код = завершен, статус = 19/н/д
08 апреля, 14:19:45 arserver systemd[1]: app.service: Ошибка с результатом «код выхода».
08 апреля, 14:19:45 arserver systemd[1]: app.service: потребляется 21,420 с процессорного времени.
Я также добавил файл pam_limits.so в конфигурацию pam.d, так как читал, что в версиях, отличных от LSB, он может отсутствовать в некоторых частях. добавлен обязательный для common_session sudo и sshd
arserver@arserver03:/app/app$ grep -r "pam_limit" /etc/pam.d/
/etc/pam.d/cron: требуется сеанс pam_limits.so
/etc/pam.d/login: требуется сеанс pam_limits.so
/etc/pam.d/sshd: требуется сеанс pam_limits.so
/etc/pam.d/sudo: требуется сеанс pam_limits.so
/etc/pam.d/su: требуется сеанс pam_limits.so
/etc/pam.d/common-session: требуется сеанс pam_limits.so
/etc/pam.d/common-session-noninteractive: требуется сеанс pam_limits.so
/etc/pam.d/runuser: требуется сеанс pam_limits.so
arserver@arserver03:/carmicli/carmi$ grep -r "pam_limit" /etc/pam.d/
/etc/pam.d/cron: требуется сеанс pam_limits.so
/etc/pam.d/login: требуется сеанс pam_limits.so
/etc/pam.d/sshd: требуется сеанс pam_limits.so
/etc/pam.d/sudo: требуется сеанс pam_limits.so
/etc/pam.d/su: требуется сеанс pam_limits.so
/etc/pam.d/common-session: требуется сеанс pam_limits.so
/etc/pam.d/common-session-noninteractive: требуется сеанс pam_limits.so
/etc/pam.d/runuser: требуется сеанс pam_limits.so
На прошлой неделе я ломал голову над этой проблемой, если кто-то может помочь, буду очень признателен.
Переход на Ubuntu 20.04 является вариантом, но мне потребуется много времени, чтобы переместить данные, поэтому я бы предпочел найти решение, если это возможно.
ОБНОВИТЬ
когда я делаю судо су для root я получаю ту же проблему, но с этой ошибкой в журнале авторизации
8 апреля 14:45:31 arserver05 su: pam_limits(su:session): Не удалось установить ограничение для 'nofile' равным soft=10000000, hard=10000000: операция не разрешена; идентификатор пользователя = 0, идентификатор пользователя = 0
8 апреля 14:45:31 arserver05 su: pam_limits(su:session): Не удалось установить ограничение для 'nofile' равным soft=10000000, hard=10000000: операция не разрешена; идентификатор пользователя = 0, идентификатор пользователя = 0
ОБНОВЛЕНИЕ 2
Не могу установить ulimit выше 1048576
root@arserver03:/home/arserver# ulimit -n 1048576
root@arserver03:/home/arserver# ulimit -n 10485767
bash: ulimit: открытые файлы: невозможно изменить ограничение: операция не разрешена
root@arserver03:/home/arserver# ulimit -n 1048576