Limit otwartych plików nie działa jak poprzednio w OSX Yosemite [duplikat]


22

Właśnie zaktualizowałem Mac OS X do Yosemite, a teraz niektóre aplikacje nie działają (IBM DB2). Wiem, że muszę ustawić Open Files na 65000, jednak polecenie to nie działa.

Andress-MBP:~ root# ulimit -n 12288
Andress-MBP:~ root# ulimit -n 12289
-sh: ulimit: open files: cannot modify limit: Invalid argument

Dlaczego tak się dzieje i jak mogę rozwiązać problem?

Odpowiedzi:


25

Wygląda na to, że istnieje zupełnie inna metoda zmiany limitu otwartych plików dla każdej wersji OS X!

W przypadku OS X Sierra (10.12.X) musisz:

  1. W /Library/LaunchDaemonsutwórz plik o nazwie limit.maxfiles.plisti wklej następujący IN (krępuj się zmienić dwa numery, które są granice miękkie i twarde, odpowiednio):

    <?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. Zmień właściciela nowego pliku:

    sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
    
  3. Załaduj te nowe ustawienia:

    sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
    
  4. Na koniec sprawdź, czy limity są prawidłowe:

    launchctl limit maxfiles
    

7
Czekamy na nową odpowiedź dla systemu macOS 10.13! :)
— NSTJ

1
Proces nie działał dla mnie, dopóki nie uruchomiłem ponownie. Dzięki! to naprawdę bardzo pomogło
— 2773086,

Ta lista mówi również, że modyfikowanie tych plików jest sposobem na aktualizację limitu otwartych plików dla Sierra gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
— Devin G Rhode,

1
Ponowne uruchomienie jest konieczne, aby limity zadziałały (nawet jeśli krok 4 pokazuje zaktualizowane wartości)
— piątek

21

Widzę, że zadałeś to pytanie.

Istnieje limit jądra, z którym musisz sobie poradzić, kern.maxfiles, który jest limitem jądra i nie można go przekroczyć przy ustawianiu ulimit.

Zobacz stronę blogu Krypted Maximum Files w Mac OS X, aby uzyskać opis sposobu manipulowania kern.maxifiles przy użyciu sysctl.

Nie załadowałem jeszcze Yosemite na moim komputerze Mac. W sysctl -w kern.maxfiles=65000prace nad Mavericks, który ma te same kern.maxfiles = 12288 limitu domyślnie.

Sprawdziłem mój VM OS X 10.6.8 i miał ten sam limit, co nasuwa pytanie, jak poprzednio działało przed wersją OS X.

Istnieje udział slajdów ( DB2 dla Mac OS X Instalowanie i konfigurowanie DB2 dla Mac OS X ) pokazujący zalecane limity korzystania z DB2, patrz Zwiększanie parametrów systemu strona 7.

Zwiększ parametry systemu

Otwórz /etc/sysctl.conf (lub utwórz go, jeśli jeszcze nie istnieje) i wstaw następujące ustawienia. Te ustawienia zwiększają niektóre ustawienia pamięci współużytkowanej i limity użytkowników, których DB2 potrzebuje do pracy na Macu.

Dodaj następujące polecenie do /etc/sysctl.conf
kern.sysv.shmmax = 1073741824
kern.sysv.shmmin = 1
kern.sysv.shmmni = 4096
kern.sysv.shmseg = 32
kern.sysv.shmall = 1179648
kern.maxfilesperproc = 65536
kern.maxfiles = 65536

Wygląda na to, że straciłeś /etc/sysctl.confplik podczas aktualizacji.


W rzeczywistości zainstalowałem program DB2 dawno temu i działało. Potem w zeszłym roku zaktualizowałem się do Maverick, bez żadnego problemu. A dzisiaj zaktualizowałem do Yosemite i pojawia się ten problem. Nie mogę uruchomić już zainstalowanego programu DB2.
— AngocA

Inną rzeczą jest to, że mój plik sysctl.conf jest identyczny z plikiem umieszczonym w poście. Utworzyłem przy pierwszej instalacji DB2 (rok temu), ale nie dotknąłem go podczas migracji.
— AngocA

Problemem były pewne puste miejsca w tym pliku: ibm.com/developerworks/community/forums/html/…
— AngocA

1
Końcowe spacje, kto by pomyślał. Apple powinien mieć jednych z najlepszych programistów na świecie.
— user187561,

@ user187561 sysctl(8)pochodzi z BSD.
— Drew Stephens,

12

W systemie Mac OS 10.10 ustawienie ulimit nie może przekroczyć ustawienia limitu uruchamiania.

Dlatego najpierw należy uruchomić maxctiles pliku launchctl w terminalu, aby uzyskać bieżące ustawienie:

launchctl limit maxfiles
maxfiles    256            unlimited 

Więc w moim przypadku miękki limit wynosi 256, twardy limit jest nieograniczony. A jeśli chcę ustawić limit miękki na 512:

sudo launchctl limit maxfiles 512 unlimited

Szczegółowe wykorzystanie launchctl do ustawiania limitów można znaleźć tutaj: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/launchctl.1.html


Wydaje się, że „launchctl limit maxfiles 512 unlimited” ustawia moje (miękkie, twarde) limity na (512,10240) w Yosemite 10.10.5 w dniu 30.09.2015
— Dave X

2
„launchctl limit maxfiles unlimited nieograniczony; launchctl limit maxfiles” wskazuje, że 10240 jest największym limitem, jaki można wprowadzić. Używanie większych liczb po cichu kończy się niepowodzeniem, pozostawiając ustawienie jak wcześniej.
— Dave X
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.