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

서버는 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가 증가 할 파일 제한을받을.

도움?



답변

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

worker_rlimit_nofile 30000;

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

su - nobody
ulimit -Hn
ulimit -Sn

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

참고


답변

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

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


답변

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

sysctl -p

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