OS X 10.7.1에서 "시스템에 열린 파일이 너무 많습니다" 오류에 대한 수정 사항이 있습니까?

OS X 10.7.1에서 "시스템에 열린 파일이 너무 많습니다" 오류에 대한 수정 사항이 있습니까?

OS X 10.7.1에서 성가신 "시스템에 열린 파일이 너무 많습니다" 제한을 제거해야 합니다. 

방법이 있나요?

답변1

에 따르면이 유용한 기사(읽기를 추천합니다):

기본적으로 Mac OS X에서 열 수 있는 최대 파일 수는 12,288개로 설정되어 있으며 특정 프로세스에서 열 수 있는 최대 파일 수는 10,240개입니다.

다음을 통해 이를 확인할 수 있습니다.

  • sysctl kern.maxfiles
  • sysctl kern.maxfilesperproc

다음을 사용하여 한도를 늘릴 수 있습니다(위험은 본인 부담).

  • sysctl -w kern.maxfiles=20480(또는 원하는 번호 선택)
  • sysctl -w kern.maxfilesperproc=18000(또는 원하는 번호 선택)

변경 사항을 영구적으로 적용하려면 다음과 같이 sudo설정을 입력 해야 합니다 /etc/sysctl.conf(생성해야 할 수도 있음).

kern.maxfiles=20480
kern.maxfilesperproc=18000

참고: OS X 10.10 이하에서는 /etc/launchd.conf다음과 같은 설정을 추가할 수 limit maxfiles있으며 여기에 입력한 내용이 무시됩니다.

다시 한 번 기사에서:

이 작업을 수행하면 커널 자체에는 최대 파일 수가 있지만 셸에는 그렇지 않을 수도 있습니다. 그리고 이 많은 파일을 차지하는 대부분의 프로세스는 셸에 의해 시작될 것이므로 이를 늘리는 것이 좋습니다.

이에 대한 명령은 다음과 같습니다.

ulimit -S -n 2048 # or whatever number you choose

그 변화도 일시적입니다. 현재 쉘 세션 동안에만 지속됩니다. 쉘을 열 때마다 실행되도록 하려면 쉘 구성 파일( 등)에 이를 추가할 수 있습니다 .bashrc..zshrc

답변2

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

OS X 시에라의 경우(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

삼. 다음 새 설정을 로드합니다.

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

4. 마지막으로 한도가 올바른지 확인하세요.

launchctl limit maxfiles

답변3

다른 옵션은 범인을 찾는 것일 수 있습니다.

sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail

마지막으로 어떤 파일이 열려 있는지 확인할 수 있습니다.

sudo lsof -n | grep socketfil

원하는 경우 프로세스를 종료합니다.

kill $pid

댓글에서:

그만한 가치가 있는 경우 다음을 사용하여 가장 많이 열린 파일이 있는 프로세스 ID 목록을 얻을 수도 있습니다.

lsof -n +c 0 | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail

답변4

여러분, Mavericks 10.9.4에서

ulimit -n 2048잘 작동합니다. 새 로그인 세션을 시작해야 할 수도 있습니다.

관련 정보