Linux에서 열린 파일 수 제한을 어떻게 변경합니까? [닫은]


194

내 응용 프로그램을 실행할 때 때때로에 대한 오류가 발생 too many files open합니다.

실행시 ulimit -a한계가 1024임을보고합니다. 한계를 1024 이상으로 늘리려면 어떻게합니까?

편집 ulimit -n 2048 하면 권한 오류가 발생합니다.



난 그냥 CentOS의 7 (RHEL에 동일)에이를 통해 가서 내가 너무 많이 심지어 모든 게시물에 문제가 있었기 때문에 그것을 다루는 블로그 게시물을 만든 : coding-stream-of-consciousness.com/2018/12/21/...를 . 종종 열린 파일과 함께 실제로 여러 설정 파일에 상주하는 nproc를 늘려야합니다. 그리고 별도의 설정이있는 systemd / systemctl을 사용하는 경우. 일종의 견과류입니다.
John Humphreys-w00te

Linux에서 VSCode를 사용하는 경우이 해결 방법이 도움이 될 수 있습니다. stackoverflow.com/a/55027686/1190948
Juri Sinitson

답변:


153

당신은 항상 할 수 ulimit -n 2048있습니다. 현재 쉘에 대한 한계 만 재설정하며 지정한 수는 하드 한계를 초과하지 않아야합니다.

각 운영 체제의 구성 파일에는 서로 다른 하드 제한 설정이 있습니다. 예를 들어 Solaris에서 하드 파일 열기 제한은 / etc / system에서 부팅시 설정할 수 있습니다.

set rlim_fd_max = 166384
set rlim_fd_cur = 8192

OS X의 경우 동일한 데이터가 /etc/sysctl.conf에 설정되어 있어야합니다.

kern.maxfilesperproc=166384
kern.maxfiles=8192

Linux에서 이러한 설정은 종종 /etc/security/limits.conf에 있습니다.

한계에는 두 가지가 있습니다.

  • 소프트 한계는 단순히 현재 시행되는 한계입니다.
  • 하드 한계는 소프트 한계를 설정하여 초과 할 수없는 최대 값을 표시합니다.

소프트 제한은 모든 사용자가 설정할 수있는 반면 하드 제한은 루트 만 변경할 수 있습니다. 한계는 프로세스의 속성입니다. 하위 프로세스가 작성 될 때 상속되므로 init 스크립트에서 시스템 초기화 중에 시스템 전체 한계를 설정하고 사용자 로그인 중에 pam_limits를 사용하여 사용자 한계를 설정해야합니다.

컴퓨터를 부팅 할 때 종종 기본값이 설정됩니다. 따라서 개별 쉘에서 ulimit를 재설정하더라도 재부팅시 이전 값으로 다시 재설정 될 수 있습니다. 기본값을 변경하려는 경우 존재 ulimit 명령에 대해 부트 스크립트를 grep 할 수 있습니다.


4
Windows에서 이것을 사용하는 방법을 알려주시겠습니까?
Pritam

내가로 변경할 수 있습니다 @hoyhoy 2048하지만 같은 4500이유는 무엇입니까? 이것을보십시오
alhelal

@GaneshKrishnan 언급 한 리눅스 파일에 무엇을 추가해야합니까?
aviral sanjay

@Pritam Windows에는 없습니다 ulimit. 사용중인 것을 지정해야합니다 (예 : WSL, Cygwin).
Melebius

99

Linux를 사용 중이고 권한 오류가 발생하면 /etc/limits.conf또는 /etc/security/limits.conf파일 에서 허용 된 한계를 늘려야 합니다 (파일이있는 위치는 특정 Linux 배포판에 따라 다름).

예를 들어, 컴퓨터의 모든 사용자가 열린 파일 수를 최대 10000까지 올리려면 파일에 줄을 추가 limits.conf하십시오.

* hard nofile 10000

그런 다음 시스템에 로그 아웃하고 다시 로그인하면 다음을 수행 할 수 있습니다.

ulimit -n 10000

권한 오류가 없습니다.


6
참고 : 와일드 카드 root 사용자 에게 적용 되지 않습니다 . 한계 root hard nofile 10000를 조정할지 여부 를 지정 해야합니다 root.
Joshua Pinter

1
@JoshPinter Haha, 방금 지난 3 시간을 보냈으므로 모든 단일 튜토리얼을 변경하는 방법에 대해 살펴 보았고 ulimit마침내 루트로 로그인했습니다. 그렇기 때문에 1024in을 계속 보았습니다 ulimit -a. 와일드 케어를 바꾸고 *내부를 추가했습니다 limits.conf. 모든 것이 이제는 좋습니다 (ssh 키를 사용하는 메신저는 걱정하지 마십시오 : P)-감사합니다 !!!
NiCk Newman 2016

1
@NiCkNewman 나는 당신이 그것에 대해 웃고있어 기쁘다! 프로그래머 / 시스템 사용자에게는 좋은 특성입니다. 나는 똑같은 일을했고 너무 즐겁지 않았습니다. 도움이되어 다행입니다! :)
Joshua Pinter 2016 년

보충 :이 디렉토리에서 설정을 찾을 수도 있습니다 : /etc/security/limits.d/.
Waldemar Wosiński

2
나는 /etc/security/limits.conf를 처음 열었고 모든 것이 주석 처리되어 있음을 알았습니다. 그렇다면 "hard nofile"의 기본값은 무엇입니까?
ka3ak

36

1) 다음 줄을 추가하십시오 /etc/security/limits.conf

webuser hard nofile 64000

그런 다음 웹 사용자로 로그인

su - webuser

2) 웹 사용자를 위해 다음 두 파일 편집

다음 을 실행하여 .bashrc 및 .bash_profile 파일을 추가하십시오 .

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile

3) 로그 아웃 한 후 다시 로그인하여 변경 사항이 올바르게 작성되었는지 확인하십시오.

$ ulimit -a | grep open
open files                      (-n) 64000

그것과 그들 붐, 붐 붐.


9
limits.conf에서 줄을 'hard'에서 'soft'로 변경하면 새로운 기본값이되며 bash 프로파일을 변경할 필요가 없습니다.
RishiD

추가 단계를 반복하는 것 같습니다. 한도 만 설정하면 프로필과 동일하지만 모든 세션에서 수행됩니다.
Eddie

6

일부 서비스가 ulimits로 묶인 경우 적절한 명령을 서비스의 init-script에 넣는 것이 더 쉬운 경우가 있습니다. 예를 들어 Apache가보고 할 때

[경고] (11) 자원을 일시적으로 이용할 수 없음 : apr_thread_create : 작업자 스레드를 생성 할 수 없음

넣어보십시오 ulimit -s unlimited/etc/init.d/httpd. 서버 재부팅이 필요하지 않습니다.

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