OS X Yosemite - Otwartych jest zbyt wiele plików

18

Niedawno przeszedłem z Mavericks do Yosemite ... wystąpiły bóle głowy

Jestem prawie pewien, że mój problem dotyczy liczby plików, które mogę otworzyć - ale nie jestem pewien, jak go rozwiązać . Jestem też całkiem pewien, że przeczytałem każdy artykuł / wskazówkę dotyczącą tworzenia /etc/sysctl.confpliku i /etc/launchd.confpliku

Dla jasności oba wyglądają obecnie jak nb (nie jestem nawet pewien, czy są to właściwe polecenia, aby je w nich umieścić - próbowałem prawie wszystkiego i każdej kombinacji, tj .: wyższe wartości, niższe wartości , usuwanie poleceń, dodawanie poleceń)

/etc/launchd.conf

limit maxfiles 16384 32768
limit maxproc 1000 2000

/etc/sysctl.conf

# Turn up maxproc
kern.maxproc=2048
# Turn up the maxproc per user
kern.maxprocperuid=512

Próbowałem również zwiększyć moje wartości ulimit - zarówno globalnie, jak i lokalnie dla mojej bieżącej sesji ... no bueno

ulimit -a

-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       709
-n: file descriptors                4096

Ok - tu zaczyna się mój ból głowy ... Moja baza danych (serwer Percona 5.6.21-69.0 instalowany przez homebrew) zaczęła się dusić i umierać, aw mysql-error.log została wypełniona z błędem too many files open.

2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorder_products.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tokenorders.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsdevices.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/tsracks.frm' (errno: 24 - Too many open files)
2014-10-21 15:19:50 5190 [ERROR] /usr/local/Cellar/percona-server/5.6.21-69.0/bin/mysqld: Can't open file: './ie/v_classunity_classlist.frm' (errno: 24 - Too many open files)
2014-10-21 15:20:48 5190 [ERROR] Error in accept: Too many open files

To tutaj początkowo zacząłem próbować rozwiązać ten problem poprzez „podniesienie” moich ulimit, maxfiles, maxproc itp.

W końcu - sfrustrowany, przeszedłem i wrócę do tego problemu później. Więc wtedy próbowałem sudo gem install nokogiri w kółko, to się nie udało i wyplułem ten sam błąd (wiele powtórzeń o builder.rb nie udało się zbudować natywnego rozszerzenia gem - a następnie kilka powtarzających się stosów śledzenia Logs Gist

Błędy instalacji nokogiri Błędy instalacji nokogiri

Próbowałem / przeszukałem kilka różnych podejść do rozwiązania tego problemu (tj .: dodatkowe flagi itp.). To niesamowite - i kiedy zacząłem myśleć, że ten problem jest związany z liczbą otwartych plików / procesów, sprawdziłem, topkiedy klejnot się instalował .... Byłem bardzo zaskoczony, gdy zobaczyłem, co znalazłem

top podczas gem install nokogiri sudo gem zainstaluj nokogiri

Wygląda na to, że mój proces wciąż się rozwidla, co miało sens dla JEDNEJ linii na moim poprzednim obrazie (patrz „obraz błędów instalacji nokogiri”)

sh: fork: Resource temporarily unavailable

Więc mam trochę pomysłów, ale nie jestem pewien, jak debugować # plików?

AKTUALIZACJA

Udało mi się zainstalować nokogiri. Niestety, nie jestem do końca pewien, co to naprawiło b / c Próbowałem tak wielu rzeczy. Ale myślę, że to musiało poradzić sobie z ponownym instalowaniem ruby. Nadal jednak pojawia się ten sam problem, gdy moja baza danych narzeka na zbyt wiele otwartych plików, gdy korzystam z bazy danych, która nie jest trywialnie mała.

veilig
źródło
Hm Prawdopodobnie nie powinno się tyle odradzać? Być może warto również zgłosić błąd twórcom tego klejnotu.
slhck

Odpowiedzi:

16

/etc/launchd.confWydaje mi się, że modyfikowanie liczby zapytań Google i sugestii SO nie działa w Yosemite (10.10). Po wielu kombinacjach zmiany / restartu / testu skończyło się to modyfikowaniem (lub tworzeniem, jeśli nie istnieje) /etc/sysctl.confpliku.

Właśnie to musiałem wprowadzić, aby działało

kern.maxfiles=65536
kern.maxfilesperproc=65536

Nie jestem pewien, czy kern.maxfilestrzeba tam być, ale kiedy sam to miałem, nadal miałem ten sam problem, kiedy dodałem, że kern.maxfilesperprocwszystko zaczęło działać.

veilig
źródło
Odkryłem, że wymagane jest ponowne uruchomienie, aby te zmienne zadziałały (zgodnie z oczekiwaniami). Możesz potwierdzić, że wartości się zmieniły, wykonując sysctl -a | grep kern.maxfiles.
Blake Frederick
8

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), /Library/LaunchDaemons/limit.maxfiles.plistktó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>65536</string>
          <string>65536</string>
        </array>
       <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>

Spowoduje to ustawienie limitu otwartych plików na 65536. Drugi plik konfiguracyjny plist powinien być przechowywany w /Library/LaunchDaemons/limit.maxproc.plistnastę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 plist muszą być własnością root:wheeli mieć uprawnienia -rw-r--r--. Uprawnienia te powinny być domyślnie na miejscu, ale można je zapewnić, uruchamiając je sudo chmod 644 <filename>. 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 launchctl limit.

Oprócz ustawienia te limity na poziomie systemu, zalecamy ustawienie na poziomie sesji, jak również poprzez dołączenie następujące linie do swojego bashrc, bashprofilelub analogicznego pliku:

ulimit -n 65536
ulimit -u 2048

Podobnie jak pliki plist, twój bashrc lub podobny plik powinien mieć -rw-r--r--uprawnienia. 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 65536.

Źródło: http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/

Jedateach
źródło
1
„launchctl limit maxfiles unlimited unlimited; launchctl limit maxfiles” informuje, że maksimum wynosi 10240 w moim Yosemite 10.10.5 w dniu 30.09.2015, a eksperymentowanie z nimi wydaje się pokazywać, że jeśli użyjesz większej jawnej liczby, będzie to zignorowany.
Dave X
5

Domyślne wartości Yosemite to 12 KB i 10 KB:

$ sysctl -a | grep kern.maxfiles
kern.maxfiles: 12288
kern.maxfilesperproc: 10240

Tylko ustawienie kern.maxfilesw /etc/sysctl.confwydaje się rozwiązać moje problemy. /etc/sysctl.confplik:

kern.maxfiles=24576
Michel
źródło
dokładnie takie same wartości dla sierra
Devin G Rhode,
Jednak launchctl limit maxfilesdał mi to:maxfiles 256 unlimited
Devin G Rhode