Jak trwale kontrolować maksymalne zużycie zasobów systemowych na komputerze Mac?

85

Przed Mavericks mogłem użyć /etc/launchd.confpliku do zmiany maksymalnego zużycia zasobów systemowych, na przykład:

limit maxfiles 16384 unlimited
limit maxproc 16384 unlimited

To już nie działa w Mavericks.

Jak to zrobić w najnowszej wersji OS X?

Howard
źródło
Twoje limity są wyższe niż maksimum dla OS X. maxfiles osiąga wartość szczytową 10240, a limit maxproc wynosi 1064. Jeśli zatwierdzona odpowiedź ustali limity, podałbym kciuki w górę .. ale to było źle i nie poprawione przez dobry rok + teraz ..
Joey T.
@atmosx: Powinno być /etc/sysctl.conf, nie /etc/sysctrl.conf.
Siu Ching Pong -Asuka Kenji-
1
@JoeyT: W rzeczywistości możesz ustawić wyższy limit! Ale najpierw musisz kupić „OS X Server” z „App Store”, jeśli korzystasz z Mac OS X 10.8 (Mountain Lion) lub 10.9 (Mavericks). (Tak, musisz zmienić 19,99 USD, aby zmienić ustawienie!) Krótko mówiąc, musisz uruchomić sudo serverinfo --setperfmode trueraz, aby ustawić urządzenie w „trybie wydajności serwera”. Następnie masz „wyższe maksimum”, w zależności od konfiguracji maszyny. Proszę zobaczyć mój post na discussions.apple.com/thread/5166397 o szczegóły. W wersji 10.10 (Yosemite) tryb jest domyślnie włączony (przynajmniej na moim komputerze!). Zobacz moją odpowiedź poniżej.
Siu Ching Pong -Asuka Kenji-

Odpowiedzi:

87

Limit sesji Shell

Ustawione limity ulimitwpływają tylko na procesy utworzone przez bieżącą sesję powłoki.

  • „Limit miękki” to faktyczny limit, który jest używany. Można go ustawić, o ile nie jest on większy niż „twardy limit”.
  • Można również ustawić „twardy limit”, ale tylko na wartość mniejszą niż bieżąca i tylko na wartość nie mniejszą niż „miękki limit”.
  • „Twardy limit”, a także ogólnosystemowe limity, może zostać podniesiony przez root(administratora) poprzez wykonanie poleceń konfiguracji systemu lub zmodyfikowanie plików konfiguracji systemu.

Po zakończeniu sesji powłoki (przez Ctrl+ D, exitlub zamknięcie Terminal.appokna itp.) Ustawienia znikają. Jeśli chcesz mieć to samo ustawienie w następnej sesji powłoki, dodaj to ustawienie do skryptu uruchamiania powłoki.

UWAGA: Jeśli używasz bash, powinien to być ~/.bash_proilelub ~/.bash_login. Jeśli używasz innych powłok, prawdopodobnie tak powinno być ~/.profile.

Limit systemu (wymaga ponownego uruchomienia)

Dla 10.9 (Mavericks), 10.10 (Yosemite), 10.11 (El Capitan) i 10.12 (Sierra):

Musisz utworzyć plik w /Library/LaunchDaemons/limit.maxfiles.plist(właściciel:, root:wheeltryb:) 0644:

<?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>262144</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist>

Powinieneś zmienić liczby zgodnie ze swoimi potrzebami. Są to odpowiednio „miękkie ograniczenie” ( 262144) i „twarde ograniczenie” ( 524288). Aby uzyskać więcej informacji, zapoznaj się ze stroną podręcznika, uruchamiając man launchd.plist.

Dla 10,8 (Mountain Lion):

Możesz dodać następujące wiersze do /etc/sysctl.conf(owner:, root:wheelmode:) 0644:

kern.maxfiles=524288
kern.maxfilesperproc=262144

Powinieneś zmienić liczby zgodnie ze swoimi potrzebami. Są to odpowiednio „limit ogólnosystemowy” ( kern.maxfiles) i „limit na proces” ( kern.maxfilesperproc). Aby uzyskać więcej ustawień, sprawdź stronę podręcznika, uruchamiając man sysctllub przeczytaj kod źródłowy na /usr/include/sys/sysctl.h.

W przypadku starszego systemu Mac OS X (chyba działa na wersji 10.7 (Lion) lub wcześniejszej):

Możesz dodać następujący wiersz do /etc/launchd.conf(owner:, root:wheelmode:) 0644:

limit maxfiles 262144 524288

Powinieneś zmienić liczby zgodnie ze swoimi potrzebami. Są to odpowiednio „miękkie ograniczenie” ( 262144) i „twarde ograniczenie” ( 524288).

Jeśli system nie pozwala ustawić limitów powyżej określonej wartości ...

System nie pozwala ustawić wartości wyższej niż „twarde maksimum” (zaproponowane przez Apple). Aby zwiększyć to „twarde maksimum”, musisz kupić „OS X Server” w „App Store”, a następnie raz wykonać następujące polecenie:

sudo serverinfo --setperfmode true

Aktywuje to „tryb wydajności serwera” na twoim komputerze. Następnie możesz ustawić maksimum zgodnie z konfiguracją urządzenia (patrz to) . Próbowałem już wcześniej (w Mountain i Mavericks) i działa! Proszę zobaczyć mój post ( tutaj ), aby uzyskać więcej informacji.

Bibliografia

Siu Ching Pong -Asuka Kenji-
źródło
1
Dziękuję Ci; Używam Yosemite, a technika plist LaunchDaemon zadziałała dla mnie. Wierzę, że to jedyny, który to robi. Każdemu, kto tego potrzebuje, należy pamiętać, że ponowne uruchomienie jest wymagane, aby zadziałało .
nc.
1
@nc. : Dodano „Wymagaj ponownego uruchomienia, aby zadziałać” w mojej odpowiedzi. Zbyt długo pracuję w terenie, więc nie wiedziałem, że niektórzy o tym nie wiedzą. Dzięki za przypomnienie!
Siu Ching Pong -Asuka Kenji-
2
Używam 10.9.5, ale tylko /etc/launchd.confpodejście pokazuje jakikolwiek efekt podczas uruchamiania ulimit -n. Czy ktoś może zaktualizować instrukcje, jeśli jest to istotne?
Sridhar Sarnobat
1
Metoda Yosemite 10.10 działa również w El Capitan 10.11. Chociaż nie mogłem ustawić go na „nieograniczony”, musiałem po prostu użyć naprawdę dużej liczby
antyriver
1
@aolszowka: Zobacz, jak zwiększyć ten limit poprzez /etc/sysctl.conf: superuser.com/questions/827984/...
Rob Johansen,
11

Wygląda na to, że utworzenie pliku /etc/launchd.confi umieszczenie w nim polecenia powinno załatwić sprawę.


Jeśli to nie zadziała, prawdopodobnie możesz edytować lub utworzyć /etc/rc.localplik i dodać do niego swoje polecenie, ponieważ istnieje niewielkie prawdopodobieństwo, że Apple kiedykolwiek usunie obsługę ograniczenia w wierszu poleceń.


Edycja 1 :
Powinienem zacząć, launchd strona man odwołuje się do następujących plików:

  ~/Library/LaunchAgents         Per-user agents provided by the user.
  /Library/LaunchAgents          Per-user agents provided by the administrator.
  /Library/LaunchDaemons         System-wide daemons provided by the administrator.
  /System/Library/LaunchAgents   Per-user agents provided by Mac OS X.
  /System/Library/LaunchDaemons  System-wide daemons provided by Mac OS X.

Założę się, że teraz musisz wprowadzić swoje polecenie w ~/Library/LaunchAgentslub w /Library/LaunchDaemons.
Powinieneś spróbować obu.

Edycja 2 :
Należy również pamiętać, że uruchomiony plik xml wymaga nie tylko skryptów. GUI zostało zaprojektowane, aby pomóc w takim zadaniu, a nie wolnym jest Lingon . Może istnieją inne darmowe produkty.

Kiwy
źródło
ponieważ w moim poście jest wiele informacji, czy możesz powiedzieć, która była dobra?
Kiwy
zobacz moją odpowiedź poniżej.
Howard
Zarówno /etc/launchd.confi /etc/rc.localsą ignorowane w 10.10 i później, bo w 10,10 launchd został przebudowany i SystemStarter został usunięty.
nisetama
@nise nie krępuje się aktualizować moje odpowiedzi, jeśli w najnowszej wersji Mac OS
pojawi się
10

Właśnie dodałem te dwie linie do moich .bash_profile
prac jak urok

ulimit -n 1024
ulimit -u 1024
pixelass
źródło
2
Nie wpływa na ograniczenia systemu.
not2savvy
1
Może to być jednak w porządku, jeśli limity systemu są wystarczająco wysokie. Aby sprawdzić, jakie są, możesz po prostu uruchomić ulimit -n -H. W systemie macOS High Sierra unlimitedzmieniło się „miękkie” ograniczenie użytkownika .bash_profile.
Joshua Pinter
9

Limity systemowe

Zmiana limitów w /etc/launchd.conflub /etc/rc.localnie jest już obsługiwana w najnowszym systemie macOS. Zobacz: Stare systemy i technologia .

Zamiast tego należy utworzyć nowego agenta uruchamiania .

Oto przykład PlistBuddypolecenia przy użyciu polecenia (patrz man PlistBuddy:):

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxfiles.plist \
-c "add Label string com.launchd.maxfiles" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string launchctl" \
-c "add ProgramArguments: string limit" \
-c "add ProgramArguments: string maxfiles" \
-c "add ProgramArguments: string 10240" \
-c "add ProgramArguments: string unlimited" \
-c "add RunAtLoad bool true"

I podobnie dla maxproclimitu:

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxproc.plist \
-c "add Label string com.launchd.maxproc" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string launchctl" \
-c "add ProgramArguments: string limit" \
-c "add ProgramArguments: string maxproc" \
-c "add ProgramArguments: string 2000" \
-c "add ProgramArguments: string unlimited" \
-c "add RunAtLoad bool true"

Aby załadować powyższe pliki, uruchom: sudo launchctl load /Library/LaunchAgents/com.launchd.*.plist.

Uwagi:

  • Aby wydrukować plik, uruchom: catlub PlistBuddy -x -c Print /Library/LaunchAgents/com.launchd.maxfiles.plist.
  • Aby sprawdzić dziennik za jakiekolwiek błędy podczas obciążenia, uruchom: tail -f /var/log/system.log.
  • Aby zobaczyć aktualne launchdlimity, uruchom: launchctl limit.
  • .plistPlik może być umieszczony w lub na użytkownika katalogu czynnik całego systemu ( LaunchAgents). Zobacz: man launchda man launchd.plistczy ten lub , że odpowiedź na więcej szczegółów.

Limity jądra

Należy pamiętać, że powyżej limitów systemu uruchomionych jest nadal ograniczony przez jądro, więc nie można ustawić ich powyżej rzeczywistych limitów ustawionych w zmiennych stanu jądra (patrz: man sysctlpomoc).

Aby zobaczyć aktualne limity jądra, uruchom: sysctl -a | grep ^kern.max.

W celu zwiększenia maxfileslimitu, uruchom: sudo sysctl -w kern.maxfiles=20480.

Aby je utrzymać, użyj podobnej metody, aby utworzyć .plistpliki startowe , np

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.kern.maxfiles.plist \
-c "add Label string com.kern.maxfiles" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string sysctl" \
-c "add ProgramArguments: string -w" \
-c "add ProgramArguments: string kern.maxfiles=20480" \
-c "add RunAtLoad bool true"

Ograniczenia powłoki

W celu uzyskania limitów powłoki dodaj odpowiednie ulimitpolecenie ~/.bashrclub ~/.bash_profileplik startowy dla pojedynczego użytkownika lub /etc/bashrcwszystkich użytkowników. Zobacz: Jak dodać trwałe ustawienia ulimit powłoki na Macu?

Sugerowane linie do dodania:

# Changes the ulimit limits.
ulimit -Sn 4096      # Increase open files.
ulimit -Sl unlimited # Increase max locked memory.
kenorb
źródło
1
Zachowaj szczególną ostrożność, maxprocponieważ domyślnie limit twardego jądra dla tego parametru wynosi 1064, co oznacza, że ​​ustawienie go na 2000 lub „nieograniczony” w rzeczywistości ustawia go tylko na 1064. Niestety jądro tego nie wymusza maxprocperuid < maxproc, a sugerowane ustawienia pozostawią System z maxprocperuid=2000, a maxproc=1064co jest niebezpieczne. Przeczytaj więcej na ten temat tutaj .
Old Pro