2012-06-07 08:52:49 +0000 2012-06-07 08:52:49 +0000
202
202
Advertisement

Czy istnieje poprawka do błędu "Zbyt wiele otwartych plików w systemie" w OS X 10.7.1?

Advertisement

Muszę pozbyć się brzydkiego limitu “Zbyt wiele otwartych plików w systemie” w OS X 10.7.1. 

Czy jest sposób?

Advertisement
Advertisement

Odpowiedzi (10)

234
234
234
2012-06-29 20:23:19 +0000

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ę.

63
63
63
2017-01-24 14:56:37 +0000

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
34
Advertisement
34
34
2012-06-07 11:09:52 +0000
Advertisement

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.

34
34
34
2017-02-18 00:42:52 +0000

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
10
Advertisement
10
10
2014-09-04 16:19:11 +0000
Advertisement

Ludzie, na Mavericks 10.9.4

ulimit -n 2048 działa dobrze. Może być konieczne uruchomienie nowej sesji logowania.

5
5
5
2018-11-23 16:59:24 +0000

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.

1
Advertisement
1
1
2017-05-18 02:52:29 +0000
Advertisement

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.

1
1
1
2019-01-25 13:15:52 +0000

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

0
Advertisement
0
0
2019-05-29 17:55:40 +0000
Advertisement

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.

0
0
0
2016-12-14 18:50:26 +0000

Spotkałem się z nim podczas robienia chmod -R, więc udało mi się go obejść wykonując mniejsze kroki, np.

# for each directory
find . -type d -exec chmod 755 {} \;
Advertisement

Pytania pokrewne

12
5
13
8
3
Advertisement
Advertisement