Muszę pozbyć się irytującego limitu „Zbyt wiele otwartych plików w systemie” w systemie OS X 10.7.1.
Czy istnieje sposób?
Muszę pozbyć się irytującego limitu „Zbyt wiele otwartych plików w systemie” w systemie OS X 10.7.1.
Czy istnieje sposób?
Odpowiedzi:
Zgodnie z tym pomocnym artykułem (który polecam przeczytać):
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, sudo
aby 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.conf
podobne limit maxfiles
i 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
, .zshrc
lub cokolwiek), jeśli chcesz go uruchomić przy każdym otwarciu powłoki.
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):
<?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
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 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.
ulimit -a
.
Inną opcją może być znalezienie winnego:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
W ostatnim można zobaczyć, które pliki są otwarte:
sudo lsof -n | grep socketfil
I zabij ten proces, jeśli chcesz
kill $pid
Z komentarzy:
Za to, co jest warte, możesz również uzyskać listę identyfikatorów procesów z najczęściej używanymi plikami
lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
-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.
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 launchctl
zadania z @ninjaPixel ( https://superuser.com/a/1171028/760235 ), aby uzyskać trwałe rozwiązanie.
Możesz biegać
lsof -n
które przetwarzają otwierają zbyt wiele plików.
następnie zabij to.
lub
sysctl -w kern.maxfiles=20480
zmień go na większy.
Po wszystkich zmianach powyżej moja Java nie utworzyła więcej niż 10000 plików. Rozwiązaniem była flaga jvm -XX: -MaxFDLimit
Spotkałem to podczas robienia chmod -R, więc obejrzałem go, robiąc mniejsze kroki, np
# for each directory
find . -type d -exec chmod 755 {} \;
Podobne do https://superuser.com/a/1171028/367819
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:
<?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>200000</string>
<string>200000</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
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ą:
<?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: 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.
https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Pamiętaj, aby ponownie uruchomić komputer Mac, aby wartości były skuteczne.