ulimit value not changing for a process

У нас есть приложение 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?

0
14.03.2017, 21:31
1 ответ

Я обновил /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, вам может потребоваться найти правильную конфигурацию.

2
28.01.2020, 04:47

Теги

Похожие вопросы