У нас есть приложение ruby, которое начало выдавать множество ошибок "Невозможно создать новый сокет: Слишком много открытых файлов". Я обновил "etc/security/limits.conf" как показано ниже
root soft nofile 6553600
root hard nofile 6553600
nobody soft nofile 655360
nobody soft nofile 655360
mysql hard nofile 655360
mysql hard nofile 655360
* soft nofile 81920
* hard nofile 65000
* - nofile 102400
также обновил fs.file-max = 90000
в /etc/sysctl.conf
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) 62459
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 10240
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) 62459
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
ulimit -n
10240
но все равно лимит открытых файлов для процесса ruby равен 1024
cat /proc/13765/limits (pid of ruby app)
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 62459 62459 processes
Max open files 1024 4096 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 62459 62459 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
процесс ruby использует более 1024 файлов
lsof -p 13765 | wc -l
1070
Как я могу увеличить значение "Max open files" для этого процесса/приложения ruby?
Я обновил
/etc/security/limits.conf
, как показано ниже
Это читается в pam_limits.so , поэтому он действует только для всего, что проходит через PAM, как в логине пользователя.
обновлен
/etc/sysctl.conf
Вероятно, это читается некоторыми сценариями загрузки, поэтому изменения вступают в силу только после перезагрузки ... (Там systemd-sysctl.service
и скрипт старого стиля /etc/init.d/procps
в моем Debian.)
Дело в том, что ни один из этих файлов не читается мгновенно, и изменения в ulimit никогда не применяются к запущенным процессам.
Как я могу увеличить значение «Макс. Количество открытых файлов» для этого процесса / приложения ruby?
Узнать, что запускает его, изменить там ulimit и перезапустить процесс. Если вы запустите его из командной строки, измените ограничения на оболочку и перезапустите ее, если вы запустите ее из init / systemd / something, вам может потребоваться найти правильную конфигурацию.