Linux 및 nginx의 최대 파일 설명자 및 worker_rlimit_nofile의 최상의 값 이해


10

nginx에서 겉보기에 일반적인 "너무 많은 파일 디스크립터"오류가 발생했습니다. 많은 검색 후 해결책은 nginx에 사용 가능한 파일 디스크립터 수를 분명히 늘리는 것입니다. 그러나 의미 있고 안전한 방법으로 편안하게 작업 할 수있는 충분한 정보가 없습니다. 대부분의 포럼 / 이메일 스레드가 다루는 주요 사항은 다음과 같습니다.

  • OS에는 자체 총 파일 설명자 제한이 있습니다 (시스템에서 cat /proc/sys/fs/file-max"100678"출력).
  • 각 사용자는 자신의 한계도 가질 수 있습니다 (그러나 내 시스템에서 ulimit모든 사용자 출력이 "무제한"으로 실행 되면 자세한 내용은 맨 아래에 업데이트 참조 )
  • 몇 사람은 무엇의 라인을 따라 뭔가 말했다 이 사람이 말했다 : '지침 worker_rlimit_nofile, 그것은 않는 운영 체제의 한계입니다 "얼마나 많은"지정하지 않습니다. 지시자 worker_rlimit_nofile은이 한계가 충분하지 않은 경우 빠르고 더러워서이 한계를 확대 할 수 있습니다. ' 따라서 구성 대신에 nginx OS 사용자에 대한 제한을 설정하는 것이 더 낫다는 의미는 무엇입니까?

작업 자당 연결 수보다 큰 worker_rlimit_nofile 값을 던져 하루에 호출 할 수는 있지만 여기서 무슨 일이 일어나고 있는지 실제로 알지 못한다고 생각합니다.

  • 작업 자당 한도가 OS 한도보다 낮은 이유는 무엇입니까?
  • 내 한계가 무엇인지 어떻게 알 수 있습니까?

업데이트 : 루트 및 일반 사용자 모두에 대해 ulimit는 "무제한"출력, BUT ulimit -Hnulimit -Sn두 출력 1024

답변:


10

worker_rlimit_nofilenginx를 실행하는 사용자가 아닌 작업자 프로세스의 파일 설명자에 대한 제한을 설정합니다. 이 사용자로 실행중인 다른 프로그램이 파일 설명 부족을 정상적으로 처리 할 수없는 경우이 제한을 사용자에 대한 것보다 약간 작게 설정해야합니다.

먼저, 파일 디스크립터를 사용하는 것은 무엇입니까?

  1. 클라이언트에 대한 각 활성 연결
  2. proxy_pass를 사용하십니까? 호스트에 대한 소켓을 열 것입니다 :이 요청을 처리하는 포트
  3. 로컬 포트에 proxy_pass를 사용하십니까? 또 다른 열린 소켓입니다. (해당 프로세스 소유자에게)
  4. nginx가 제공하는 정적 파일

작업 자당 한도가 OS 한도보다 낮은 이유는 무엇입니까?

작업자가 시스템에서 실행되는 유일한 프로세스가 아니기 때문에 OS에 의해 제어됩니다. nginx를 실행하는 사용자를 위해 변경하려면 아래를 참조하십시오. 작업자가 모든 프로세스에서 사용할 수있는 모든 파일 디스크립터를 다 사용했다면 가능한 한 한계를 설정하지 마십시오.

#/etc/sysctl.conf
#This sets the value you see when running cat  /proc/sys/fs/file-max
fs.file-max = 65536"


#/etc/security/limits.conf
#this sets the defaults for all users
* soft nofile 4096
* hard nofile 4096

#This overrides the default for user `usernamehere`
usernamehere soft nofile 10240
usernamehere hard nofile 10240

이러한 보안 제한 변경 후에도 여전히을 사용하는 사용자의 소프트 제한을 늘려야한다고 생각 ulimit합니다.

내 한계가 무엇인지 어떻게 알 수 있습니까?

ulimit -a 실행 한 사용자와 관련된 모든 제한이 표시됩니다.


1
감사합니다. 이제 파일 디스크립터 제한을 높였으므로 연결이 부족합니다. 아마 당신도 저를 도울 수 있습니다 :) serverfault.com/questions/209014/…
John Bachir

1
CentOS / Fedora 사용자에게 참고하십시오. SELinux를 활성화 한 경우 setsebool -P httpd_setrlimit 1nginx가 rlimit를 설정할 권한을 갖도록 실행해야합니다 .
Jarrett

2

정직하게 소스를 확인해야하지만 상당히 낮습니다.

나는 사용 worker_rlimit_nofile 15000;하고 문제가 없었지만 안전하게 파일을 늘릴 수는 있지만 파일 설명자가 부족할 가능성은 적습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.