어떤 명령 / 구성 파일이 OS X에서 열린 파일 제한을 제어합니까? OS X 10.5 / 10.6 / 10.7에 다른 명령이 있습니까? 나는 아래 탐색 옵션은 ulimit
, sysctl
및launchctl
“너무 많은 열린 파일”은 Leopard, 아마도 다른 버전의 OS X에서 흔히 발생하는 오류입니다.
열린 파일 제한을 보는 방법에는 여러 가지가 있습니다.
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 512
virtual memory (kbytes, -v) unlimited
$ launchctl limit
cpu unlimited unlimited
filesize unlimited unlimited
data unlimited unlimited
stack 8388608 67104768
core 0 unlimited
rss unlimited unlimited
memlock unlimited unlimited
maxproc 1024 2048
maxfiles 2048 4096
$ sysctl -a | grep files
kern.maxfiles = 32768
kern.maxfilesperproc = 16384
kern.maxfiles: 32768
kern.maxfilesperproc: 16384
kern.num_files: 2049
위의 게시물 중 일부에서 다음 명령으로이를 수정할 수 있다고 주장했습니다.
sudo launchctl limit maxfiles 16384 32768
sudo ulimit -n 32768
sudo sysctl -w kern.maxfilesperproc=16384
sudo sysctl -w kern.maxfiles=32768
그러나, 위의 명령에서, 단지 sysctl
명령은 분명히 효과가있다 (예를 ulimit -n
하고 launchctl limit
있는 동안, 입력 한 위의 명령 후 변화를 보여주지 sysctl -a
요청 된 변화를 보여 않음).
OS에 대한 이러한 매개 변수를 변경하는 해당 위치는 다음과 같습니다.
/etc/sysctl.conf
/etc/launchd.conf
또한 현재 쉘만 제어하는 한 가지 답변 을 발견했습니다 ulimit
.
macOS 에서 최대 파일 / 최대 열린 파일 제한을 어떻게 상향 조정할 수 있습니까?
답변
예전에는 여러 한계가 있었으며 특정 인스턴스에서 도달하는 최저 한계가 오류를 생성한다는 간단한 대답이었습니다. 이제 10.12 launchctl limit maxfiles
도 혼합되어 있습니다. 구현에 대한 자세한 내용은 이 훌륭한 답변이 현상금을 받고 있으며 내가 줄 수있는 것보다 더 많은 투표를받을 자격이 있습니다.
다른 관련 스레드는 다음과 같습니다.
ulimit
수준은 열려있는 파일과 커널을 홍수에서 한 가난한 쉘 스크립트를 방지하기 위해 낮게 설정되어 있습니다.
는 kern.maxfilesperproc
하나 개의 프로세스는 대부분의 전부는 아니지만 커널에서 열린 파일 핸들러 공간을 사용할 수 있도록 계산 최대 파일에 약간의 공간을 거기에두고있다.
정상적인 상황에서는 kern.maxfiles
이것이 최종 제한 요소입니다.
Sierra에서-제한은 256 개의 열린 파일과 무제한의 최대 값이므로 소프트 제한에 대해 3 ~ 4 천개의 파일을 설정하면 거의 모든 하드웨어에서 작동하며 런 어웨이 프로세스가 너무 많이 열릴 때 시스템의 응답 성을 유지합니다. 파일. 우리는 개발 서버를 256 한계로 유지하여 프로덕션에서 소프트웨어를 찾는 것이 아니라 개발 / 준비 및 테스트에서 새롭고 문제가있는 소프트웨어를 포착하는 것을 좋아합니다.
저는 10k 파일을 좋아하지 않습니다. 아마도 APFS 및 NVMe 스토리지를 사용하면 상상할 수없는 날을 보게 될 것입니다. 그러나 파일 한도를 위해 수백 또는 수천을 고수하려고 노력하십시오. 특히 Mac에 프로세스 제한 이 낮은 경우 프로세스 가 적은 파일을 너무 많이 열면 문제가 발생할 수 있습니다.
답변
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
답변
다음은 가장 일반적인 문제를 해결해야하며 계층 순서대로 나열됩니다.
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
노트:
- 이러한 변경 사항을 적용하려면 다시 시작해야합니다.
- AFAIK 더 이상 OS X에서 제한을 ‘무제한’으로 설정할 수 없습니다
- launchctl maxfiles는 sysctl maxfiles에 의해 제한되므로이를 초과 할 수 없습니다.
- sysctl은 launchctl maxfiles에서 kern.maxfilesperproc을 상속받는 것으로 보입니다.
- ulimit는 launchctl의 ‘파일 열기’값을 기본적으로 상속받는 것으로 보입니다.
- / etc / profile 또는 ~ / .profile 내에서 사용자 정의 ulimit를 설정할 수 있습니다. 이것이 필요하지는 않지만 예제를 제공했습니다.
- 기본값과 비교할 때 이러한 값을 매우 높은 숫자로 설정할 때는주의하십시오. 기능에는 안정성 / 보안이 있습니다. 다른 웹 사이트에 작성된 것으로 생각되는이 예제 번호를 사용했습니다.
답변
간단히 말해서 :
-
이
ulimit
명령은 “쉘에 사용 가능한 자원과 그것이 작성하는 프로세스에 대한 제어”를 제공합니다 (help ulimit
및 참조man bash
). 쉘에 제공된 자원은 시스템 자원 한계에 의해 제한됩니다. -
launchctl
현재의 프로세스 제어에 의해 최대 시스템 자원 소모 (다음을 참조man setrlimit
하고man launchctl
). 최대 값은 커널 한계에 의해 제한됩니다. -
sysctl
컨트롤 한계 (: 참조 커널man sysctl
과 BSD의 튜닝 커널 제한 ).
한계를 늘리려면 문제점에 따라 각 명령을 사용할 수 있습니다.
참조 : `launchctl limit`과`ulimit`의 관계는 무엇입니까?
열린 파일이 너무 많은 문제의 경우 이는 로컬 소프트 셸 스크립트,로 실행되는 글로벌 스크립트 root
, 앱 또는 모든 프로세스에 관계없이 정확히 소프트 또는 하드 제한에 도달 한 항목에 따라 다릅니다 . 모든 한계 (쉘, 론치 및 커널 한계) 를 늘릴 가치가 있습니다.
한계를 지속적으로 늘리려면 Mac에서 최대 시스템 리소스 소비를 지속적으로 제어하는 방법을 참조하십시오.