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.