Zwiększenie limitu maksymalnego pliku Yosemite dla aplikacji

5

Próbowałem podnieść limit maxfile i maxfileperproc na Yosemite, ale bez powodzenia. Utworzyłem plik sysctl.conf w folderze etc, który z powodzeniem zwiększył wartości podczas wyświetlania przez grep.

Jednak jeśli spojrzę na maxfiles launchctl limit, wartość jest nadal niepoprawna.

Wydaje się, że niektóre rozwiązania używają ulimit -n do ustawienia limitu, ale kiedy jestem w terminalu, nie mogę tego właściwie użyć. Daje mi błąd „Nieprawidłowy argument” lub „Nieautoryzowana operacja”. Z powodzeniem zwiększyłem ulimit za pomocą skryptu bash_profile, ale ponieważ aplikacja jest uruchamiana z poziomu aplikacji, a nie powłoki, nie ma to znaczenia. Z powodzeniem zwiększyłem również ulimit za pośrednictwem użytkownika root, ale kiedy jest wylogowany, nie zapisuje zmian.

Idealnie szukam czegoś, co działa tak, jak zrobił to plik launchd.conf, i po prostu automatycznie zwiększa maxfiles Launchctl {#} przy ponownym uruchomieniu.

Czy istnieje sposób, aby to zrobić skutecznie? Może używasz innej firmy, takiej jak Lingon, lub demona uruchamiania?

Dzięki!

toadstool333
źródło

Odpowiedzi:

8

Zrozumiałem to dzięki zabawie z Riakiem z Basho . Kierunki dla Yosemite to:


Aby dostosować limity otwartych plików w całym systemie w systemie Mac OS X Yosemite, musisz utworzyć dwa pliki konfiguracyjne.

Pierwszy to plik listy właściwości (aka plist), /Library/LaunchDaemons/limit.maxfiles.plistktóry zawiera następującą konfigurację 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>65536</string>
          <string>65536</string>
        </array>
      <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>

Spowoduje to ustawienie limitu otwartych plików na 65536. Drugi plik konfiguracyjny plist powinien być przechowywany w /Library/LaunchDaemons/limit.maxproc.plistnastępującej treści:

<?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>

Oba pliki plist muszą być własnością root:wheeli mieć uprawnienia -rw-r--r--. Uprawnienia te powinny być domyślnie na miejscu, ale można je zapewnić, uruchamiając je sudo chmod 644 <filename>. Chociaż powyższe kroki spowodują prawidłowe ustawienie ogólnosystemowych limitów otwartych plików po ponownym uruchomieniu, możesz je zastosować ręcznie, uruchamiając launchctl limit.

Oprócz ustawienia te limity na poziomie systemu, zalecamy ustawienie na poziomie sesji, jak również poprzez dołączenie następujące linie do swojego bashrc, bashprofilelub analogicznego pliku:

ulimit -n 65536
ulimit -u 2048

Podobnie jak pliki plist, twój bashrclub podobny plik powinien mieć -rw-r--r--uprawnienia. W tym momencie możesz ponownie uruchomić komputer i wejść ulimit -ndo terminala. Jeśli twój system jest poprawnie skonfigurowany, powinieneś zobaczyć, że maxfiles został ustawiony na 65536.


Proces ten jest nieco inny w przypadku innej wersji OS X, ale również dobrze udokumentowany przez ten zespół. Jeszcze raz dziękuję zespołowi z Basho za udokumentowanie tego procesu.

Mbb
źródło
Właśnie to przeszedłem i mogę potwierdzić, że działa (10.10.2), ale jest kilka uwag: 1) wymagany jest restart. Uruchamianie launchctl limitnie działało dla mnie 2) Te dwa polecenia ulimit zawiodły przed ponownym uruchomieniem (i myślę, że są niepotrzebne?), po prostu zignorowałem tę część.
Cory Mawhorter
1
W oparciu o moje testy maksymalna dopuszczalna wartość dla maxproc w Yosemite wynosi 2500. „Launctl limit maxproc 2500” działa, ale wszelkie większe wartości są po cichu ignorowane. Jestem pewien, że jest to gdzieś w dokumentacji ...
@JLG Pomocne wiedzieć. Biorąc pod uwagę, że punktem początkowym wydaje się być 1064 na moim MacPro, to tylko x2,5, co jest ponure w porównaniu z moją nadzieją, że uda mi się uzyskać do 10-15 tys. Procesów, aby wspierać 20-dziwnych użytkowników robotów uruchamiających równoległe symulatory iOS . Wygląda na to, że będziemy musieli wytropić niektóre starsze 8-rdzeniowe komputery Mac mini i połączyć je w klaster.
android.weasel
Właściwie to nie był Mac Pro - to Mac Pro bootujący się z Maca Mini udającego dysk twardy. Może istnieje rzeczywista wersja serwerowa MacO, która może pójść wyżej?
android.weasel