nginx로 열린 파일이 너무 많아 한계를 높일 수 없습니다


22

서버는 Ubuntu 13.04 (GNU / Linux 3.9.3-x86_64-linode33 x86_64)입니다.

nginx는 nginx / 1.2.6입니다.

나는 지금 몇 시간 동안이 일을 해 왔으므로 여기에 내가 얻는 것이 있고 여기에 내가 한 일이 있습니다.

tail -f /usr/local/nginx/logs/error.log
2013/06/18 21:35:03 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:05 [crit] 3426#0: accept4() failed (24: Too many open files)

Nginx 실행 중 :

geuis@localhost:~$ ps aux | grep nginx
root      3422  0.0  0.0  39292   380 ?        Ss   21:30   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    3423  3.7 18.8 238128 190848 ?       S    21:30   0:13 nginx: worker process      
nobody    3424  3.8 19.0 236972 192336 ?       S    21:30   0:13 nginx: worker process      
nobody    3426  3.6 19.0 235492 192192 ?       S    21:30   0:13 nginx: worker process      
nobody    3427  3.7 19.0 236228 192432 ?       S    21:30   0:13 nginx: worker process      
nobody    3428  0.0  0.0  39444   468 ?        S    21:30   0:00 nginx: cache manager process

/etc/security/limits.conf에서 수정 된 소프트 / 하드 제한 (파일 끝에서 설정)

root soft  nofile 65536
root hard  nofile 65536

www-data soft nofile 65536
www-data hard nofile 65536

nobody soft nofile 65536
nobody hard nofile 65536

최대 파일 읽기

cat /proc/sys/fs/file-max
500000

그리고 /etc/pam.d/common-session에서 :

session required pam_limits.so

이것을 추가하고 좋은 측정을 위해 서버를 다시 시작하면 nginx의 경우 부모 프로세스의 PID를 가져 와서 소프트 / 하드 한계를 계산합니다.

cat /proc/<PID>/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            1024                 4096                 files     

부모 프로세스는 '루트'로 실행되고 4 명의 작업자는 '아무도'로 실행되지 않습니다.

root      2765  0.0  0.0  39292   388 ?        Ss   00:03   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    2766  3.3 17.8 235336 180564 ?       S    00:03   0:21 nginx: worker process      
nobody    2767  3.3 17.9 235432 181776 ?       S    00:03   0:21 nginx: worker process      
nobody    2769  3.4 17.9 236096 181524 ?       S    00:03   0:21 nginx: worker process      
nobody    2770  3.3 18.3 235288 185456 ?       S    00:03   0:21 nginx: worker process      
nobody    2771  0.0  0.0  39444   684 ?        S    00:03   0:00 nginx: cache manager process

어떻게해야하는지 알고 Google에서 얻을 수있는 모든 것을 시도했습니다. 나는 할 수 의 nginx가 증가 할 파일 제한을받을.

도움?

답변:


32

nginx에 다음 줄을 추가하고 프로세스를 다시 시작하십시오.

worker_rlimit_nofile 30000;

이를 통해 작업자는 더 많은 파일을 가져올 수 있습니다. 그런 다음 다음을 통해 확인할 수 있습니다.

su - nobody
ulimit -Hn
ulimit -Sn

새로운 하드 / 소프트 한계를 출력해야합니다.

참고


6
worker_rlimit_nofile시스템 제한이 아닌 uWSGI 설정 만 변경하면 (나에게 효과적 임)를 통해 확인할 수 없습니다 ulimit. 대신을 직접 봐야합니다 /proc/<pid of worker>/limits.
Jan Fabry 2019

사용자 (아무도 / www-data)가 로그 아웃했다가 다시 로그인해야한다고 생각합니다. 서버를 다시 시작하십시오. 나를위한 ulimit는 증가 된 것을 보여 주지만 프로세스는 여전히 고양이 / proc / {pid} / limits에 따라 제한됩니다.
felix

@felix OP는 이미 서버를 다시 시작했다고 언급했지만, 필요합니다.
Nathan C

3

우분투에서 /etc/pam.d/su를 편집하여 필요한 라인 세션을 추가하거나 주석 해제하십시오. pam_limits.so

또한 /etc/security/limits.conf에서 공백이 아닌 문자 사이에 TABS가 있는지 확인하십시오.


1

해당 파일을 편집 한 후 다음 명령을 실행하십시오

sysctl -p

그런 다음 nginx를 다시 시작하십시오.


1
효과가 없습니다. 한계는 동일하게 유지되었습니다.
Geuis 2018 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.