2011-06-27 10:56:47 +0000 2011-06-27 10:56:47 +0000
102
102

Zwiększyć maksymalną liczbę otwartych deskryptorów plików w Snow Leopard?

Próbuję zrobić coś, co wymaga dużej liczby deskryptorów plików

sudo ulimit -n 12288 jest tak wysokie, jak Snow Leopard chce; powyżej tego skutkuje

/usr/bin/ulimit: linia 4: ulimit: open files: cannot modify limit: Invalid argument.

Chcę podnieść tę liczbę znacznie wyżej, powiedzmy do 100000. Czy jest to możliwe?

Odpowiedzi (4)

95
95
95
2011-06-27 21:17:50 +0000

Użycie komendy ulimit zmienia tylko limity zasobów dla bieżącej powłoki i jej dzieci, a sudo ulimit tworzy powłokę roota, dostosowuje jej limity, a następnie wychodzi (w ten sposób, o ile widzę, nie ma prawdziwego efektu).
Aby przekroczyć 12288, musisz dostosować parametry jądra kern.maxfiles i kern.maxfilesperproc, a także (przynajmniej według tego wpisu na blogu , który jest podsumowaniem tej dyskusji ) limit launchd. Możesz użyć launchctl limit do ustawienia ich wszystkich naraz:

sudo launchctl limit maxfiles 1000000 1000000

Aby to było trwałe (tzn. nie resetowało się po restarcie), utwórz /etc/launchd.conf zawierający:

limit maxfiles 1000000 1000000

Ten możesz użyć ulimit (ale bez sudo) do ustawienia limitu procesu.

Jeśli to nie wystarczy, możesz napotkać ograniczenia rozmiaru w jądrze. Jeśli twój model to obsługuje , uruchomienie jądra w trybie 64-bitowym może pomóc.

42
42
42
2012-12-03 12:07:46 +0000

Następujące rozwiązania powinny rozwiązać większość problemów (i są wymienione w kolejności ich hierarchii):

echo 'kern.maxfiles=20480' | sudo tee -a /etc/sysctl.conf
echo -e 'limit maxfiles 8192 20480\nlimit maxproc 1000 2000' | sudo tee -a /etc/launchd.conf
echo 'ulimit -n 4096' | sudo tee -a /etc/profile

Uwagi:

  1. Aby zmiany te zaczęły obowiązywać, konieczne będzie ponowne uruchomienie komputera.
  2. AFAIK nie można już ustawić limitów na ‘unlimited’ pod OS X
  3. launchctl maxfiles są ograniczone przez sysctl maxfiles, a zatem nie mogą ich przekroczyć
  4. sysctl wydaje się dziedziczyć kern.maxfilesperproc z launchctl maxfiles
  5. ulimit wydaje się dziedziczyć wartość ‘otwartych plików’ z launchctl domyślnie
  6. możesz ustawić własny ulimit w /etc/profile, lub ~/.profile ; chociaż nie jest to wymagane, podałem przykład
  7. Bądź ostrożny przy ustawianiu którejkolwiek z tych wartości na bardzo wysoką liczbę w porównaniu z ich domyślną - cechy istnieją stabilność/bezpieczeństwo. Wziąłem te przykładowe liczby, które uważam za rozsądne, napisane na innych stronach internetowych.
20
20
20
2011-12-10 10:11:12 +0000

Wygląda na to, że OS X Lion nie dopuszcza “unlimited” jako wartości:

% sudo launchctl limit maxfiles 8192 unlimited
Neither the hard nor soft limit for "maxfiles" can be unlimited. Please use a numeric parameter for both.

Podanie wartości liczbowych zarówno dla miękkiego jak i twardego limitu załatwia sprawę:

% sudo launchctl limit maxfiles 4096 8192
3
3
3
2018-12-21 14:43:27 +0000

Na OS X 10.13.6 to działa dla mnie:

$ sysctl kern.maxfiles
kern.maxfiles: 12288
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240
$ sudo sysctl -w kern.maxfiles=1048600
kern.maxfiles: 12288 -> 1048600
$ sudo sysctl -w kern.maxfilesperproc=1048576
kern.maxfilesperproc: 10240 -> 1048576
$ ulimit -S -n
256
$ ulimit -S -n 1048576
$ ulimit -S -n
1048576