OS X 10.7.1의 성가신 "시스템에 너무 많은 파일이 열려 있습니다"제한을 제거해야합니다.
방법이 있습니까?
OS X 10.7.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
당신은 당신이 쉘을 열 때마다 실행하려는 경우 또는 무엇이든).
kern.maxfiles=65000 kern.maxfilesperproc=65000
/etc/sysctl.conf에와 재부팅. kern.maxfiles는 무시되고 기본값을 유지했지만 kern.maxfilesperproc는 65000으로 설정되었습니다.
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
IO Error: Bad file descriptor (Write failed)
ulimit 설정을 늘려야합니다. 요즘 OS X에서는 기본적으로 256입니다. ulimit -n 4096
~ / .profile 또는 이와 동등한 것을 추가 하거나 유사하게하면 로컬 환경에서 해결할 수 있습니다. ulimit -a
현재 레벨을 확인하기 위해 실행
시스템 설정을 보려면 다음을 실행하십시오.
launchctl limit maxfiles
이전보다 프로세스별로 Lion (10240)에서 상당히 높게 설정되었습니다. 그러나 여전히 타격을 가하면 원하는 레벨의 동일한 명령을 사용하여 더 높게 설정할 수 있습니다. 변경 사항을 영구적으로 유지하려면 /etc/launchd.conf에서 관련 행을 추가해야합니다.
ulimit -a
).
다른 옵션은 범인을 찾는 것일 수 있습니다.
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
마지막 파일의 경우 열려있는 파일을 볼 수 있습니다.
sudo lsof -n | grep socketfil
원하는 경우 프로세스를 종료하십시오.
kill $pid
의견에서 :
가치있는 것을 위해 가장 열린 파일을 사용하여 프로세스 ID 목록을 얻을 수도 있습니다.
lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
-h
(OS X 10.12.3) 없이 잘 작동했습니다 :sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
-h
lsof -n +c 0
프로세스 이름이 잘리지 않도록하는 데 사용 합니다.
최신 macOS (작성 시점 : 10.14.1)의 경우 sudo launchctl limit maxfiles 64000 524288
(기본적으로 256) 사용할 수 있지만 현재 세션 내에서만 작동합니다. 영구적 인 해결책 launchctl
을 위해서는 @ninjaPixel ( https://superuser.com/a/1171028/760235 )의 작업을 사용하십시오 .
당신은 실행할 수 있습니다
lsof -n
어떤 프로세스가 너무 많은 파일을 엽니 다.
그럼 죽여
또는
sysctl -w kern.maxfiles=20480
더 큰 것으로 변경하십시오.
내 자바 위의 모든 변경 후 10000 개 이상의 파일을 만들지 못했습니다. 해결책은이 jvm 플래그였습니다 -XX : -MaxFDLimit
chmod -R을 수행하는 동안 문제가 발생하여 더 작은 단계를 수행하여 문제를 해결했습니다.
# for each directory
find . -type d -exec chmod 755 {} \;
https://superuser.com/a/1171028/367819 와 유사
Mac OS X 시스템의 현재 제한을 확인하려면 다음을 실행하십시오.
launchctl limit maxfiles
마지막 두 열은 각각 소프트 및 하드 한계입니다.
Mac OS X Yosemite에서 시스템 전체에서 열린 파일 제한을 조정하려면 두 개의 구성 파일을 생성해야합니다. 첫 번째는 /Library/LaunchDaemons/limit.maxfiles.plist의 특성 목록 (일명 plist) 파일이며 다음 XML 구성을 포함합니다.
<?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>200000</string>
<string>200000</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
이렇게하면 열린 파일 제한이 200000으로 설정됩니다. 두 번째 plist 구성 파일은 /Library/LaunchDaemons/limit.maxproc.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.maxproc</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxproc</string>
<string>2048</string>
<string>2048</string>
</array>
<key>RunAtLoad</key>
<true />
<key>ServiceIPC</key>
<false />
</dict>
</plist>
두 plist 파일 모두 root : wheel이 소유하고 권한 -rw-r--r--를 가져야합니다. 이 권한은 기본적으로 있어야하지만 sudo chmod 644를 실행하여 권한이 있는지 확인할 수 있습니다. 위에서 설명한 단계로 인해 시스템 전체 열린 파일 제한이 다시 시작될 때 올바르게 설정되지만 launchctl limit을 실행하여 수동으로 적용 할 수 있습니다.
시스템 레벨에서 이러한 한계를 설정하는 것 외에도 bashrc, bashprofile 또는 유사한 파일에 다음 행을 추가하여 세션 레벨에서 설정하는 것이 좋습니다.
ulimit -n 200000
ulimit -u 2048
plist 파일과 마찬가지로 bashrc 또는 유사한 파일에는 -rw-r--r-- 권한이 있어야합니다. 이제 컴퓨터를 다시 시작하고 터미널에 ulimit -n을 입력 할 수 있습니다. 시스템이 올바르게 구성된 경우 maxfiles가 200000으로 설정되어 있어야합니다.
자세한 내용은이 기사를 참조하십시오.
https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
값을 유효하게하려면 Mac을 재시동하십시오.