프로세스의 ulimit 값은 변경되지 않습니다.

프로세스의 ulimit 값은 변경되지 않습니다.

"새 소켓을 만들 수 없습니다: 열린 파일이 너무 많습니다"라는 오류가 많이 발생하기 시작한 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

이 Ruby 프로세스/응용 프로그램의 "최대 열린 파일" 값을 어떻게 늘릴 수 있나요?

답변1

/etc/security/limits.conf다음과 같이 업데이트했습니다 .

이는 다음으로 인해 발생합니다.pam_limits.so, 따라서 사용자 로그인과 같이 PAM을 통과하는 모든 것에 대해서만 적용됩니다.

고쳐 쓰다 /etc/sysctl.conf

일부 시작 스크립트에서 이를 읽을 수 있으므로 변경 사항은 재부팅 후에만 적용됩니다... ( systemd-sysctl.serviceDebian에는 레거시 스크립트가 있습니다.)/etc/init.d/procps

요점은 이러한 파일 중 어느 것도 즉시 읽히지 않으며 ulimit에 대한 변경 사항이 실행 중인 프로세스에 적용되지 않는다는 것입니다.

이 Ruby 프로세스/응용 프로그램의 "최대 열린 파일" 값을 어떻게 늘릴 수 있나요?

시작된 원인을 찾아 거기에서 ulimit를 변경하고 프로세스를 다시 시작하십시오. 명령줄에서 시작하는 경우 셸의 제한을 변경하고 다시 시작하면 작동할 것입니다. init/systemd/what에서 실행하는 경우 올바른 구성을 찾아야 할 수도 있습니다.

관련 정보