Czy chcesz wyjaśnić więcej, kiedy to się stanie? W jakich okolicznościach?
slhck
1
@slhck - Mam ten sam problem. Okoliczności są w zasadzie „przypadkowe”. Jestem programistą, więc dość intensywnie korzystam z komputera Mac: uruchamiam jedną lub więcej baz danych, serwer WWW, narzędzia testujące, jedną lub więcej przeglądarek i odtwarzacz muzyki jednocześnie. Google Chrome wydaje się być programem, w którym otwartych jest wiele plików.
Nathan Long
W rzeczywistości moje „intensywne użytkowanie” nie było problemem; moje ustawienia maksymalnej liczby otwartych plików dla jądra i na proces były znacznie niższe niż domyślne powinny być.
Nathan Long
2
Jeśli przeczytałeś komentarz Nathana i zastanawiałeś się, dlaczego nie podał żadnych szczegółów na temat wartości domyślnych, to dlatego, że przeliterował to wszystko w swojej odpowiedzi poniżej. (Ładna odpowiedź! :)
Olie,
Jestem w takiej samej sytuacji użytkowej jak Nathan Long i stwierdziłem, że ponowne uruchomienie Apache było jedynym krokiem, który „rozwiązał” problem. Zastosowałem wszystkie poniższe podwyższenia limitów, ale nie pomogły natychmiast. Korzystam z wiersza poleceń phpUnit testy> serwer selenium> firefox> apache> php> mysql wszystkie na tym samym Macbooku. Kiedyś działał dobrze, dopóki nie uaktualniłem do indywidualistów. Występuje błąd w testowanej aplikacji internetowej, tzn. W php / apache zabrakło plików, więc prawdopodobnie nie jest kontrolowany przez ustawienie powłoki.
Domyślnie maksymalna liczba plików, które Mac OS X może otworzyć, wynosi 12 288, a maksymalna liczba plików, które można otworzyć w danym procesie, wynosi 10 240.
Możesz to sprawdzić za pomocą:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
Możesz zwiększyć limity (na własne ryzyko) za pomocą:
sysctl -w kern.maxfiles=20480 (lub dowolny inny numer)
sysctl -w kern.maxfilesperproc=18000 (lub dowolny inny numer)
Aby zmienić na stałe, użyj, sudoaby wprowadzić ustawienia /etc/sysctl.conf(które być może będziesz musiał utworzyć), w następujący sposób:
kern.maxfiles=20480
kern.maxfilesperproc=18000
Uwaga: W systemie OS X 10.10 lub starszym możesz dodać ustawienie /etc/launchd.confpodobne limit maxfilesi spowoduje to zastąpienie tego, co tu umieścisz.
Ponownie z artykułu:
Gdy to zrobisz, samo jądro będzie miało maksymalną liczbę plików, ale powłoka może nie. A ponieważ większość procesów, które zajmą tak wiele plików, będzie inicjowana przez powłokę, będziesz chciał to zwiększyć.
Polecenie to brzmi:
ulimit -S -n 2048 # or whatever number you choose
Ta zmiana jest również tymczasowa; trwa tylko dla bieżącej sesji powłoki. Można go dodać do pliku konfiguracyjnego (shell .bashrc, .zshrclub cokolwiek), jeśli chcesz go uruchomić przy każdym otwarciu powłoki.
jaki limit dotyczy procesów uruchamianych poprzez kliknięcie ikon w obszarze uruchamiania? A jak zmienić ten limit? Kiedy mówisz „shell”, zakładam, że masz na myśli interaktywną powłokę terminala.
Cheeso
@Cheeso - Myślę , że kontroluje to ogólny limit systemu (sysctl) lub limit uruchomienia, w zależności od tego, która wartość jest niższa.
Nathan Long
1
utworzenie pliku /etc/launchd.conf z limitem zawartości maxfiles 1000000 1000000 działało dla mnie świetnie! (OSX 10.8.2 tutaj)
Zugwalt
1
Włożyłem kern.maxfiles=65000 kern.maxfilesperproc=65000w /etc/sysctl.conf i ponownie uruchomiony. kern.maxfiles został zignorowany i pozostał domyślny, ale kern.maxfilesperproc został ustawiony na 65000. Nie mam pliku /etc/launchd.conf, więc o co chodzi?
pferrel
2
Jeśli ktoś ma problemy z nieprzywieraniem plików maksymalnych, to dlatego, że po linii maxfiles znajduje się spacja, należy ją usunąć.
jjathman
62
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.
Utwórz plik pod /Library/LaunchDaemons/limit.maxfiles.plisti wklej następujące elementy (możesz swobodnie zmienić dwie liczby (odpowiednio miękkie i twarde ograniczenia):
Konieczne będzie zwiększenie ustawień ulimit - obecnie OS OS jest dość niski - domyślnie 256. Dodaj ulimit -n 4096lub podobny do swojego ~ / .profile lub odpowiednika, a to rozwiąże go w twoim lokalnym środowisku. Uruchom, ulimit -aaby sprawdzić swoje obecne poziomy
Aby zobaczyć ustawienia systemu, uruchom to:
launchctl limit maxfiles
W Lionie (10240) jest on ustawiony na nieco wyższą wartość w przeliczeniu na proces niż kiedyś. Ale jeśli nadal tam trafiasz, możesz ustawić go wyżej, używając tego samego polecenia z pożądanymi poziomami. Aby wprowadzić zmiany na stałe /etc/launchd.conf, musisz dodać odpowiednie linie.
W najnowszym systemie macOS (w momencie pisania: 10.14.1) możesz użyć sudo launchctl limit maxfiles 64000 524288(domyślnie było to 256), ale działa tylko w bieżącej sesji. Użyj launchctlzadania z @ninjaPixel ( https://superuser.com/a/1171028/760235 ), aby uzyskać trwałe rozwiązanie.
Chociaż może to być obejście problemu, wydaje się, że nie odpowiada na pytanie. Być może wyjaśnienie, że nie możesz pozbyć się wiadomości, a następnie zaproponowanie tego jako jednego ze sposobów zmniejszenia problemu, poprawiłoby twoją odpowiedź.
Aby sprawdzić aktualne limity w systemie Mac OS X, uruchom:
launchctl limit maxfiles
Dwie ostatnie kolumny to odpowiednio miękkie i twarde limity.
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) w /Library/LaunchDaemons/limit.maxfiles.plist, który zawiera następującą konfigurację XML:
Spowoduje to ustawienie limitu otwartych plików na 200000. Drugi plik konfiguracyjny plist powinien być przechowywany w /Library/LaunchDaemons/limit.maxproc.plist z następującą zawartością:
Oba pliki plist muszą być własnością root: wheel i mieć uprawnienia -rw-r - r--. Uprawnienia te powinny być domyślnie na miejscu, ale możesz je zapewnić, uruchamiając sudo chmod 644. 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 limit launchctl.
Oprócz ustawiania tych limitów na poziomie systemu zalecamy również ustawienie na poziomie sesji, dołączając następujące wiersze do pliku bashrc, bashprofile lub analogicznego:
ulimit -n 200000
ulimit -u 2048
Podobnie jak pliki plist, twój bashrc lub podobny plik powinien mieć uprawnienia -rw-r - r--. W tym momencie możesz ponownie uruchomić komputer i wpisać ulimit -n w swoim terminalu. Jeśli twój system jest poprawnie skonfigurowany, powinieneś zobaczyć, że maxfiles został ustawiony na 200000.
Możesz śledzić ten artykuł, aby uzyskać więcej informacji.
Albo post powinien zostać oznaczony jako duplikat, jeśli już istnieje odpowiedź, w przeciwnym razie proszę zamieścić odpowiednie informacje z linku, ponieważ link może nie być ważny na zawsze.
Odpowiedzi:
Zgodnie z tym pomocnym artykułem (który polecam przeczytać):
Możesz to sprawdzić za pomocą:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
Możesz zwiększyć limity (na własne ryzyko) za pomocą:
sysctl -w kern.maxfiles=20480
(lub dowolny inny numer)sysctl -w kern.maxfilesperproc=18000
(lub dowolny inny numer)Aby zmienić na stałe, użyj,
sudo
aby wprowadzić ustawienia/etc/sysctl.conf
(które być może będziesz musiał utworzyć), w następujący sposób:Uwaga: W systemie OS X 10.10 lub starszym możesz dodać ustawienie
/etc/launchd.conf
podobnelimit maxfiles
i spowoduje to zastąpienie tego, co tu umieścisz.Ponownie z artykułu:
Polecenie to brzmi:
Ta zmiana jest również tymczasowa; trwa tylko dla bieżącej sesji powłoki. Można go dodać do pliku konfiguracyjnego (shell
.bashrc
,.zshrc
lub cokolwiek), jeśli chcesz go uruchomić przy każdym otwarciu powłoki.źródło
kern.maxfiles=65000 kern.maxfilesperproc=65000
w /etc/sysctl.conf i ponownie uruchomiony. kern.maxfiles został zignorowany i pozostał domyślny, ale kern.maxfilesperproc został ustawiony na 65000. Nie mam pliku /etc/launchd.conf, więc o co chodzi?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. Utwórz plik pod
/Library/LaunchDaemons/limit.maxfiles.plist
i wklej następujące elementy (możesz swobodnie zmienić dwie liczby (odpowiednio miękkie i twarde ograniczenia):2. Zmień właściciela nowego pliku:
3. Załaduj te nowe ustawienia:
4. Na koniec sprawdź, czy limity są prawidłowe:
źródło
IO Error: Bad file descriptor (Write failed)
Konieczne będzie zwiększenie ustawień ulimit - obecnie OS OS jest dość niski - domyślnie 256. Dodaj
ulimit -n 4096
lub podobny do swojego ~ / .profile lub odpowiednika, a to rozwiąże go w twoim lokalnym środowisku. Uruchom,ulimit -a
aby sprawdzić swoje obecne poziomyAby zobaczyć ustawienia systemu, uruchom to:
W Lionie (10240) jest on ustawiony na nieco wyższą wartość w przeliczeniu na proces niż kiedyś. Ale jeśli nadal tam trafiasz, możesz ustawić go wyżej, używając tego samego polecenia z pożądanymi poziomami. Aby wprowadzić zmiany na stałe /etc/launchd.conf, musisz dodać odpowiednie linie.
źródło
ulimit -a
.Inną opcją może być znalezienie winnego:
W ostatnim można zobaczyć, które pliki są otwarte:
I zabij ten proces, jeśli chcesz
Z komentarzy:
źródło
-h
(OS X 10.12.3):sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
-h
lsof -n +c 0
do zapobiegania obcinaniu nazwy procesu.Ludzie, na Mavericks 10.9.4
ulimit -n 2048
działa w porządku. Może być konieczne uruchomienie nowej sesji logowania.źródło
W najnowszym systemie macOS (w momencie pisania: 10.14.1) możesz użyć
sudo launchctl limit maxfiles 64000 524288
(domyślnie było to 256), ale działa tylko w bieżącej sesji. Użyjlaunchctl
zadania z @ninjaPixel ( https://superuser.com/a/1171028/760235 ), aby uzyskać trwałe rozwiązanie.źródło
Możesz biegać
które przetwarzają otwierają zbyt wiele plików.
następnie zabij to.
lub
zmień go na większy.
źródło
Po wszystkich zmianach powyżej moja Java nie utworzyła więcej niż 10000 plików. Rozwiązaniem była flaga jvm -XX: -MaxFDLimit
źródło
Spotkałem to podczas robienia chmod -R, więc obejrzałem go, robiąc mniejsze kroki, np
źródło
Podobne do https://superuser.com/a/1171028/367819
Aby sprawdzić aktualne limity w systemie Mac OS X, uruchom:
Dwie ostatnie kolumny to odpowiednio miękkie i twarde limity.
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) w /Library/LaunchDaemons/limit.maxfiles.plist, który zawiera następującą konfigurację XML:
Spowoduje to ustawienie limitu otwartych plików na 200000. Drugi plik konfiguracyjny plist powinien być przechowywany w /Library/LaunchDaemons/limit.maxproc.plist z następującą zawartością:
Oba pliki plist muszą być własnością root: wheel i mieć uprawnienia -rw-r - r--. Uprawnienia te powinny być domyślnie na miejscu, ale możesz je zapewnić, uruchamiając sudo chmod 644. 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 limit launchctl.
Oprócz ustawiania tych limitów na poziomie systemu zalecamy również ustawienie na poziomie sesji, dołączając następujące wiersze do pliku bashrc, bashprofile lub analogicznego:
Podobnie jak pliki plist, twój bashrc lub podobny plik powinien mieć uprawnienia -rw-r - r--. W tym momencie możesz ponownie uruchomić komputer i wpisać ulimit -n w swoim terminalu. Jeśli twój system jest poprawnie skonfigurowany, powinieneś zobaczyć, że maxfiles został ustawiony na 200000.
Możesz śledzić ten artykuł, aby uzyskać więcej informacji.
https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Pamiętaj, aby ponownie uruchomić komputer Mac, aby wartości były skuteczne.
źródło