Snow Leopard에서 열린 파일 디스크립터의 최대 수를 늘리시겠습니까?


101

많은 수의 파일 설명자가 필요한 작업을 수행하려고합니다.

sudo ulimit -n 12288스노우 레오파드가 가고 싶어하는 것만 큼 높습니다. 이 결과를 넘어

/ usr / bin / ulimit : 행 4 : ulimit : 열린 파일 : 제한을 수정할 수 없습니다 : 잘못된 인수입니다.

100000과 같이 숫자를 훨씬 더 높이고 싶습니다. 가능합니까?


4
이 질문에 대한 답변은 더 이상 OSX Mavericks에서 작동하지 않습니다.
Howard

2
echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.conf매버릭스에서 실행 하고 다시 시작하면됩니다.
Lri

답변:


95

ulimit명령을 사용 하면 현재 쉘과 그 자식에 대한 자원 제한이 변경되고 sudo ulimit루트 쉘이 생성되고 그 제한을 조정 한 다음 종료됩니다 (따라서 실제 효과는 없습니다).
12288을 초과하려면 커널 kern.maxfileskern.maxfilesperproc매개 변수 를 조정해야하며 ( 이 토론 의 요약 인 블로그 항목 에 따라 ) 실행 된 한계도 조정해야합니다. 이 모든 것을 한 번에 조정 하는 데 사용할 수 있습니다 .launchctl limit

sudo launchctl limit maxfiles 1000000 1000000

이를 영구적으로 만들려면 (즉, 재부팅 할 때 재설정하지 않음) /etc/launchd.conf다음을 포함 하여 작성하십시오 .

limit maxfiles 1000000 1000000

그런 다음 당신은 사용할 수 있습니다 ulimit(그러나없이 sudo프로세스 제한을 조정).

그렇지 않으면 커널에서 크기 제한이 발생했을 수 있습니다. 모델에서 지원하는 경우 64 비트 모드로 커널을 부팅하면 도움이 될 수 있습니다.


1
sudo launchctl limit maxfiles 1000000 unlimited"maxfiles"에 대한 하드 또는 소프트 제한은 무제한이 될 수 없습니다. 둘 다에 숫자 매개 변수를 사용하십시오.
토마스 헌터

2
에 해당 줄을 추가 할 때주의하십시오 launchd.conf. 숫자가 너무 작 으면 컴퓨터를 사용할 수 없게 될 수 있습니다. 예를 들어, 나는 그것을 사용 limit maxfiles 1024 1024하고 그것을 다시 바꾸는 데 정말 힘들었습니다.
Shawn

1
Alas : "초기 부팅시 실행되는 하위 명령에 대해 /etc/launchd.conf 파일을 더 이상 참조하지 않습니다.이 기능은 보안상의 이유로 제거되었습니다."
Alice Purcell

작동하지 않습니다. ulimit -Sn 10240을 성공적으로 설정 한 경우에도 fd 번호가 6k를 초과 할 수 없습니다.
지안 웨이 ​​항

@JianWeihang fd 번호는 프로세스마다 다르므로 다른 프로세스에서 4000 파일을 열었다 고 가정합니다. Chrome을 실행합니까? ;)
Trejkaz

41

다음은 대부분의 솔루션을 해결해야하며 계층 순서대로 나열됩니다.

echo 'kern.maxfiles=20480' | sudo tee -a /etc/sysctl.conf
echo -e 'limit maxfiles 8192 20480\nlimit maxproc 1000 2000' | sudo tee -a /etc/launchd.conf
echo 'ulimit -n 4096' | sudo tee -a /etc/profile

노트:

  1. 이러한 변경 사항을 적용하려면 다시 시작해야합니다.
  2. AFAIK 더 이상 OS X에서 제한을 '무제한'으로 설정할 수 없습니다
  3. launchctl maxfile은 sysctl maxfile에 의해 제한되므로이를 초과 할 수 없습니다.
  4. sysctl은 launchctl maxfiles에서 kern.maxfilesperproc을 상속받는 것으로 보입니다.
  5. ulimit는 launchctl의 '파일 열기'값을 기본적으로 상속받는 것으로 보입니다.
  6. / etc / profile 또는 ~ / .profile 내에서 사용자 정의 ulimit를 설정할 수 있습니다. 이것이 필요하지는 않지만 예제를 제공했습니다.
  7. 기본값과 비교할 때 이러한 값을 매우 높은 숫자로 설정할 때는주의하십시오. 기능에는 안정성 / 보안이 있습니다. 다른 웹 사이트에 작성된 것으로 생각되는이 예제 번호를 사용했습니다.

3
Alas : "초기 부팅시 실행되는 하위 명령에 대해 /etc/launchd.conf 파일을 더 이상 참조하지 않습니다.이 기능은 보안상의 이유로 제거되었습니다."
Alice Purcell

34

OS X의 각 버전에 대해 열린 파일 제한을 변경하는 방법이 완전히 다른 것 같습니다!

OS X Sierra (10.12.X)의 경우 다음을 수행해야합니다.

1. Library/LaunchDaemons파일 이름을 지정 limit.maxfiles.plist하고 다음을 붙여 넣습니다 (두 숫자 (각각 소프트 및 하드 한계)를 자유롭게 변경하십시오).

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">  
  <dict>
    <key>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>maxfiles</string>
      <string>64000</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist> 

2. 새 파일의 소유자를 변경하십시오.

sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist

3. 다음 새 설정을로드하십시오.

sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

4. 마지막으로, 한계가 올바른지 확인하십시오.

launchctl limit maxfiles

2
이 답변은 훌륭하며 여기에 추가 할 배경이 있습니다. @
Dean Radcliffe

20

OS X Lion은 "무제한"을 값으로 허용하지 않는 것 같습니다.

% sudo launchctl limit maxfiles 8192 unlimited
Neither the hard nor soft limit for "maxfiles" can be unlimited. Please use a numeric parameter for both.

소프트 한계와 하드 한계 모두에 숫자 값을 제공하면 작업이 수행됩니다.

% sudo launchctl limit maxfiles 4096 8192

3
값 중 하나가 무제한 인 경우 값으로 사용 -1하면 결과가 나타납니다 12288. 더 큰 숫자 값을 사용할 수 있습니다 (예 :) sudo launchctl limit maxfiles 15000 150000. 그래도 이러한 설정이 효과가 있는지 확실하지 않습니다.
Daniel Beck

8

매버릭스에서 간단합니다. 일반 사용자로서 :

ulimit -n 8192

다음을 통해 업데이트 된 설정을 확인할 수 있습니다

ulimit -a

내 컴퓨터에서 :

ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       709
-n: file descriptors                8192

2
솔루션 수정을 고려하십시오. ulimit를 1024로 설정 한 다음 출력 파일 설명자를 8192 (1024 여야 함)로 표시합니다. 당신은 접근 방식이 sudo없이 탐사 적이므로 직접 변경하십시오.
y3sh

1
여기에 sudo를 사용해서는 안되지만이 답변은 올바르지 않습니다. 매버릭스 사용자는 echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.conf기계를 사용한 다음 다시 시작해야합니다
Kyle Chadha

3

OS X 10.13.6 이 나를 위해 작동합니다 :

$ sysctl kern.maxfiles
kern.maxfiles: 12288
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240
$ sudo sysctl -w kern.maxfiles=1048600
kern.maxfiles: 12288 -> 1048600
$ sudo sysctl -w kern.maxfilesperproc=1048576
kern.maxfilesperproc: 10240 -> 1048576
$ ulimit -S -n
256
$ ulimit -S -n 1048576
$ ulimit -S -n
1048576

1

일부 한계는 ulimit현재 쉘에만 적용되기 때문에 로 변경할 수 없으므로 launchctl명령을 사용하여 한계를 전체적으로 변경해야합니다. 예 :

sudo launchctl limit maxfiles 100000 unlimited

/etc/launchd.conf다른 답변에서 제안한대로 이러한 제한을 적용하는 것은 최근 macOS 릴리스에서 더 이상 지원되지 않습니다. 여전히 사용할 수 있지만 launchd.plist(참조 : man launchd.plist) 같은 사용자 별 또는 시스템 전체로 plist구성 파일 제안 여기 , 이상하고 있다 .


이러한 제한을 지속적으로 유지하기 위해 /etc/sysctl.conf파일 을 사용 하고 예를 들어 추가 할 수 있습니다 .

kern.maxprocperuid=1000
kern.maxproc=2000
kern.maxfilesperproc=20000
kern.maxfiles=50000

변경 사항을 적용하려면 재부팅해야합니다.

현재 한계를 보려면 다음을 실행하십시오. launchctl limit또는 sysctl -a | grep ^kern.max.

macOS에서 ulimit 설정을 유지하는 방법 도 참조하십시오 .

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