응용 프로그램에 대한 Yosemite Maxfile 제한 늘리기 때 값이 성공적으로 증가했습니다. 그러나 launchctl limit maxfiles를

요세미티에서 maxfile 한도 및 maxfileperproc 한도를 높이려고 노력했지만 운이 없습니다. etc 폴더에 sysctl.conf 파일을 만들었으며 grep을 통해 표시 될 때 값이 성공적으로 증가했습니다.

그러나 launchctl limit maxfiles를 보면 값이 여전히 올바르지 않습니다.

일부 솔루션은 한계를 설정하기 위해 ulimit -n을 사용하는 것으로 보이지만 실제로 터미널에있을 때 이것을 사용할 수 없습니다. “잘못된 인수”또는 “권한없는 작업”오류가 발생합니다. bash_profile 스크립트를 통해 ulimit를 성공적으로 늘 렸지만 응용 프로그램이 셸이 아닌 응용 프로그램에서 실행되기 때문에 관련이 없습니다. 또한 루트 사용자를 통해 ulimit를 성공적으로 늘 렸지만 로그 아웃하면 변경 사항이 저장되지 않습니다.

이상적으로는 launchd.conf 파일처럼 작동하는 것을 찾고 있으며 재부팅시 launchctl limit maxfiles {#}을 자동으로 증가시킵니다.

이것을 성공적으로 수행하는 방법이 있습니까? Lingon과 같은 타사를 사용하거나 시작 데몬을 사용합니까?

감사!



답변

Basho의 Riak 과 함께 연주 한 덕분에 이것을 알아 냈습니다 . 요세미티의 지침은 다음과 같습니다.


Mac OS X Yosemite에서 시스템 전체에서 열린 파일 제한을 조정하려면 두 개의 구성 파일을 생성해야합니다.

첫 번째는 /Library/LaunchDaemons/limit.maxfiles.plist다음 XML 구성을 포함 하는 특성 목록 (일명 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>65536</string>
          <string>65536</string>
        </array>
      <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>

이렇게하면 열린 파일 제한이 65536으로 설정됩니다. 두 번째 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 <filename>. 위에서 설명한 단계로 인해 시스템 전체 열린 파일 제한이 다시 시작될 때 올바르게 설정되지만을 실행하여 수동으로 적용 할 수 있습니다 launchctl limit.

시스템 레벨에서 이러한 제한을 설정하는 것 외에, 우리는 세션 수준에서 설정뿐만 아니라하여 다음 줄 추가 추천 bashrc, bashprofile또는 유사한 파일 :

ulimit -n 65536
ulimit -u 2048

plist 파일과 마찬가지로 귀하 bashrc또는 유사한 파일에 -rw-r--r--권한이 있어야합니다 . 이 시점에서 컴퓨터를 다시 시작하고 ulimit -n터미널에 들어갈 수 있습니다. 시스템이 올바르게 구성된 경우 maxfiles가 65536으로 설정되어 있어야합니다.


다른 버전의 OS X에서는 프로세스가 약간 다르지만 해당 팀에서 잘 문서화했습니다. 이 과정을 문서화 한 Basho 다시 한 번 감사드립니다 .