Czy istnieje poprawka do błędu "Zbyt wiele otwartych plików w systemie" w OS X 10.7.1?
Muszę pozbyć się brzydkiego limitu “Zbyt wiele otwartych plików w systemie” w OS X 10.7.1.
Czy jest sposób?
Muszę pozbyć się brzydkiego limitu “Zbyt wiele otwartych plików w systemie” w OS X 10.7.1.
Czy jest sposób?
Zgodnie z ten pomocny artykuł (który polecam przeczytać):
Domyślnie maksymalna liczba plików, które może otworzyć Mac OS X jest ustawiona na 12 288, a maksymalna liczba plików, które może otworzyć dany proces wynosi 10 240.
Możesz to sprawdzić za pomocą:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
Możesz zwiększyć limity (na własne ryzyko):
sysctl -w kern.maxfiles=20480
(lub dowolny numer, który wybierzesz) sysctl -w kern.maxfilesperproc=18000
(lub dowolny numer, który wybierzesz) Aby zmiana była trwała, użyj sudo
, aby umieścić swoje ustawienia w /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 OS X 10. 10 lub niżej, możesz dodać ustawienia w /etc/launchd.conf
jak limit maxfiles
i zastąpi ono wszystko, co tutaj umieścisz.
Ponownie, z artykułu:
Jak tylko 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 będą zajmować tak wiele plików będzie inicjowana przez powłokę, będziesz chciał ją zwiększyć.
Polecenie do tego jest następujące:
ulimit -S -n 2048 # or whatever number you choose
Zmiana ta jest również tymczasowa; trwa tylko przez bieżącą sesję powłoki. Możesz dodać ją do swojego pliku konfiguracyjnego powłoki (.bashrc
, .zshrc
lub cokolwiek innego), jeśli chcesz, aby była uruchamiana za każdym razem, gdy otwierasz powłokę.
Wygląda na to, że istnieje zupełnie inna metoda zmiany limitu otwartych plików dla każdej wersji OS X!
Dla OS X Sierra (10.12.X) musisz:
1. Utwórz plik w /Library/LaunchDaemons/limit.maxfiles.plist
i wklej następujące numery (które są odpowiednio limitem miękkim i twardym):
<?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
Będziesz musiał zwiększyć swoje ustawienia ulimitu - w obecnych czasach na OS X jest on dość niski - domyślnie 256. Dodaj ulimit -n 4096
lub podobny do Twojego ~/.profilu lub jego odpowiednika, a to rozwiąże problem w Twoim lokalnym środowisku. Uruchom ulimit -a
aby sprawdzić swoje aktualne poziomy
Aby zobaczyć ustawienia systemowe, uruchom to:
launchctl limit maxfiles
Jest on ustawiony nieco wyżej w Lwie (10240) na podstawie procesu niż poprzednio. Ale jeśli nadal tam uderzasz, możesz ustawić go wyżej za pomocą tej samej komendy z pożądanymi poziomami. Aby zmiany były trwałe /etc/launchd.conf jest tam, gdzie trzeba dodać odpowiednie linie.
Inną opcją może być znalezienie winnego:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
Dla ostatniego można było zobaczyć, jakie pliki są otwarte:
sudo lsof -n | grep socketfil
I zabić proces, jeśli jest to pożądane
kill $pid
Z komentarzy:
Dla tego, co jest warte, można również uzyskać listę ID procesów z najbardziej otwartymi plikami używając
lsof -n | sed -E 's/^[^]+[]+([^]+).*$//' | uniq -c | sort | tail
Ludzie, na Mavericks 10.9.4
ulimit -n 2048
działa dobrze. Może być konieczne uruchomienie nowej sesji logowania.
Dla najnowszego MacOS-a (w momencie pisania: 10.14.1), można użyć sudo launchctl limit maxfiles 64000 524288
(domyślnie było to 256), ale działa tylko w ramach bieżącej sesji. Użyj pracy launchctl
z @ninjaPixel https://superuser.com/a/1171028/760235 ) dla rozwiązania stałego.
Możesz uruchomić
lsof -n
które przetwarzają zbyt wiele plików.
a następnie zabić go .
sysctl -w kern.maxfiles=20480
zmień go na większy.
Po wszystkich zmianach powyżej mojej javy nie zrobiłem więcej niż 10000 plików. Rozwiązaniem była ta flaga jvm -XX:-MaxFDLimit
Podobnie jak w przypadku https://superuser.com/a/1171028/367819
Aby sprawdzić aktualne limity dla systemu Mac OS X, należy uruchomić:
launchctl limit maxfiles
Ostatnie dwie kolumny to odpowiednio limity miękkie i twarde.
Aby ustawić limity otwartych plików w całym systemie Mac OS X Yosemite, należy utworzyć dwa pliki konfiguracyjne. Pierwszy z nich to plik z listą właściwości (vel plist) w pliku /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>
Ustawi on limit otwartych plików na 200000. Drugi plik konfiguracyjny pliku plikowego powinien być zapisany w pliku /Library/LaunchDaemons/limit.maxproc.plist o nastę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 plikowe muszą być własnością root:wheel i posiadać uprawnienia -rw-r–r–. Te uprawnienia powinny być domyślnie ustawione, ale możesz zapewnić, że są one ustawione poprzez uruchomienie sudo chmod 644 . Podczas gdy kroki opisane powyżej spowodują, że limity otwartych plików w całym systemie będą poprawnie ustawione po ponownym uruchomieniu, możesz zastosować je ręcznie uruchamiając limit launchctl.
Oprócz ustawienia tych limitów na poziomie systemowym, zalecamy również ustawienie na poziomie sesji, poprzez dołączenie następujących linii do Twojego bashrc, bashprofile, lub analogicznego pliku:
ulimit -n 200000
ulimit -u 2048
Podobnie jak pliki plikowe, Twój bashrc lub podobny plik powinien mieć uprawnienia -rw-r–r–. W tym momencie możesz zrestartować swój komputer i wprowadzić ulimit -n do swojego terminala. Jeśli twój system jest poprawnie skonfigurowany, powinieneś zobaczyć, że maxfiles został ustawiony na 200000.
Możesz śledzić ten artykuł po więcej szczegółów. https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Pamiętaj, aby zrestartować komputer Mac, aby wartości były skuteczne.