Wie kann der maximale Ressourcenverbrauch des Systems auf einem Mac dauerhaft gesteuert werden?

85

Vor Mavericks konnte ich /etc/launchd.conffile verwenden, um den maximalen Ressourcenverbrauch des Systems zu ändern. Beispiel:

limit maxfiles 16384 unlimited
limit maxproc 16384 unlimited

In Mavericks funktioniert es nicht mehr.

Was ist die richtige Vorgehensweise in der aktuellen Version von OS X?

Howard
quelle
Ihre Limits liegen über dem Maximum für OS X. Das Maximum für Dateien liegt bei 10240 und das Maximum für maxproc bei 1064. Wenn die genehmigte Antwort die Limits festlegt, würde ich es mit einem Daumen hoch geben jetzt ..
Joey T
@atmosx: Das sollte es /etc/sysctl.confnicht sein /etc/sysctrl.conf.
Siu Ching Pong -Asuka Kenji -
1
@ JoeyT: Tatsächlich können Sie es auf ein höheres Limit einstellen! Sie müssen "OS X Server" jedoch zuerst im "App Store" kaufen, wenn Sie mit Mac OS X 10.8 (Mountain Lion) oder 10.9 (Mavericks) arbeiten. (Ja, Sie müssen USD 19,99 bezahlen, um eine Einstellung zu ändern!) Kurz gesagt, Sie müssen sudo serverinfo --setperfmode trueeinmal ausgeführt werden, um Ihren Computer in den "Server-Leistungsmodus" zu versetzen. Dann haben Sie ein "höheres Maximum", abhängig von Ihrer Maschinenkonfiguration. Weitere Informationen finden Sie in meinem Beitrag unter discussion.apple.com/thread/5166397 . Für 10.10 (Yosemite) ist der Modus standardmäßig aktiviert (zumindest auf meinem Computer!). Siehe meine Antwort unten.
Siu Ching Pong -Asuka Kenji -

Antworten:

87

Shell-Sitzungslimit

Die über festgelegten Grenzen wirken sich ulimitnur auf Prozesse aus, die von der aktuellen Shell-Sitzung erstellt wurden.

  • Das "weiche Limit" ist das tatsächlich verwendete Limit. Es könnte eingestellt werden, soweit es nicht größer als die "harte Grenze" ist.
  • Die "harte Grenze" könnte auch festgelegt werden, jedoch nur auf einen Wert, der kleiner als der aktuelle ist, und nur auf einen Wert, der nicht kleiner als die "weiche Grenze" ist.
  • Das "harte Limit" sowie systemweite Limits können von root(dem Administrator) durch Ausführen von Systemkonfigurationsbefehlen oder Ändern von Systemkonfigurationsdateien angehoben werden.

Nachdem Sie die Shell-Sitzung beendet haben (durch Ctrl+ D, exitoder Schließen des Terminal.appFensters usw.), sind die Einstellungen weg. Wenn Sie die gleiche Einstellung in der nächsten Shell-Sitzung wünschen, fügen Sie die Einstellung dem Shell-Startskript hinzu.

HINWEIS: Wenn Sie verwenden bash, sollte dies ~/.bash_proileoder sein ~/.bash_login. Wenn Sie andere Shells verwenden, sollte dies wahrscheinlich der Fall sein ~/.profile.

Systemlimit (Neustart erforderlich, um wirksam zu werden)

Für 10.9 (Mavericks), 10.10 (Yosemite), 10.11 (El Capitan) und 10.12 (Sierra):

Sie müssen eine Datei erstellen unter /Library/LaunchDaemons/limit.maxfiles.plist(Eigentümer:, root:wheelModus:) 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>

Sie sollten die Nummern entsprechend Ihren Anforderungen ändern. Sie sind das "weiche Limit" ( 262144) bzw. das "harte Limit" ( 524288). Weitere Informationen finden Sie auf der Handbuchseite, indem Sie ausführen man launchd.plist.

Für 10.8 (Berglöwe):

Sie können die folgenden Zeilen zu /etc/sysctl.conf(Eigentümer:, root:wheelModus :) hinzufügen 0644:

kern.maxfiles=524288
kern.maxfilesperproc=262144

Sie sollten die Nummern entsprechend Ihren Anforderungen ändern. Sie sind das "systemweite Limit" ( kern.maxfiles) bzw. "pro-Prozess-Limit" ( kern.maxfilesperproc). Weitere Einstellungen finden Sie auf der Handbuchseite, indem Sie man sysctlausführen, oder lesen Sie den Quellcode unter /usr/include/sys/sysctl.h.

Für ältere Mac OS X (ich denke, es funktioniert unter 10.7 (Lion) oder früher):

Sie können die folgende Zeile zu /etc/launchd.conf(Eigentümer:, root:wheelModus :) hinzufügen 0644:

limit maxfiles 262144 524288

Sie sollten die Nummern entsprechend Ihren Anforderungen ändern. Sie sind das "weiche Limit" ( 262144) bzw. das "harte Limit" ( 524288).

Wenn das System nicht zulässt, dass Sie die Grenzwerte über einen bestimmten Wert setzen ...

Das System lässt nicht zu, dass Sie einen höheren Wert als ein "hartes Maximum" (von Apple vorgeschlagen) festlegen. Um dieses "harte Maximum" zu erhöhen, müssen Sie "OS X Server" im "App Store" kaufen und dann den folgenden Befehl einmal ausführen:

sudo serverinfo --setperfmode true

Dadurch wird der "Server-Leistungsmodus" auf Ihrem Computer aktiviert. Sie können dann das Maximum entsprechend der Konfiguration Ihres Geräts einstellen (siehe dies) . Ich habe das schon mal versucht (auf Mountain und Mavericks) und es funktioniert! Weitere Informationen finden Sie in meinem Beitrag ( hier ).

Verweise

Siu Ching Pong -Asuka Kenji-
quelle
1
Danke; Ich verwende Yosemite und die LaunchDaemon-Plist-Technik hat bei mir funktioniert. Ich glaube, es ist der einzige, der das tut. Wenn Sie dies benötigen, beachten Sie bitte, dass ein Neustart erforderlich ist, damit dies wirksam wird .
nc.
1
@nc. : "Neustart erforderlich, um wirksam zu werden" wurde zu meiner Antwort hinzugefügt. Ich habe zu lange auf dem Gebiet gearbeitet, daher war mir nicht bewusst, dass einige Leute das nicht wissen. Danke für das Erinnern!
Siu Ching Pong -Asuka Kenji -
2
Ich verwende 10.9.5, aber nur der /etc/launchd.confAnsatz zeigt beim Ausführen einen Effekt ulimit -n. Könnte jemand die Anweisungen aktualisieren, wenn dies von Bedeutung ist?
Sridhar Sarnobat
1
Die 10.10-Yosemite-Methode funktioniert auch in 10.11 El Capitan. Obwohl ich es nicht auf "unbegrenzt" setzen konnte, musste ich einfach eine wirklich hohe Zahl verwenden
antriver 24.10.15
1
@aolszowka: Hier erfahren Sie, wie Sie dieses Limit erhöhen können /etc/sysctl.conf: superuser.com/questions/827984/…
Rob Johansen
11

Es scheint, dass das Erstellen der Datei /etc/launchd.confund das Einfügen Ihres Befehls den Trick machen sollte.


Wenn dies nicht funktioniert, können Sie die /etc/rc.localDatei wahrscheinlich bearbeiten oder erstellen und Ihren Befehl hinzufügen, da die Wahrscheinlichkeit gering ist, dass Apple jemals die Unterstützung für das Limit in der Befehlszeile löscht.


Edit 1 :
Ich hätte damit anfangen sollen, die launchd Manpage referenziert folgende Dateien:

  ~/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.

Ich wette, Sie müssen jetzt Ihren Befehl entweder eingeben ~/Library/LaunchAgentsoder eingeben /Library/LaunchDaemons.
Sie sollten beide versuchen.

Bearbeiten 2 :
Beachten Sie auch, dass launchd XML-Datei und nicht nur Skripte benötigt. Eine Gui wurde entwickelt, um bei solchen Aufgaben zu helfen. Eine nicht freie ist Lingon . Vielleicht gibt es noch andere kostenlose Produkte.

Kiwy
quelle
Kannst du sagen, welches das Gute war, da es in meinem Beitrag viele Informationen gibt?
Kiwy
Siehe meine Antwort unten.
Howard
Beide /etc/launchd.confund /etc/rc.localwerden in 10.10 und höher ignoriert, da in 10.10 launchd neu gestaltet und SystemStarter entfernt wurde.
Nisetama
@nise zögern Sie nicht, meine Answe'r zu aktualisieren, wenn in der letzten Version von Mac OS
Kiwy
10

Ich habe gerade diese beiden Zeilen in meine .bash_profile
Arbeiten wie ein Zauber aufgenommen

ulimit -n 1024
ulimit -u 1024
Pixelass
quelle
2
Beeinflusst die Systemgrenzen nicht.
not2savvy
1
Dies kann jedoch in Ordnung sein, wenn Ihre Systemgrenzen hoch genug sind. Um zu überprüfen, was sie sind, können Sie einfach ausführen ulimit -n -H. Auf macOS High Sierra war es unlimitedso, dass es das "weiche" Limit des Benutzers änderte .bash_profile.
Joshua Pinter
9

Systemgrenzen

Das Ändern der Grenzwerte in /etc/launchd.confoder /etc/rc.localwird für das aktuelle MacOS nicht mehr unterstützt. Siehe: Alte Systeme und Technologie .

Stattdessen sollten Sie einen neuen Startagenten erstellen .

Hier ist das Befehlsbeispiel mit PlistBuddyBefehl (siehe:) 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"

Und ähnlich für die maxprocGrenze:

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"

Zur oben genannten Dateien zu laden, ausführen: sudo launchctl load /Library/LaunchAgents/com.launchd.*.plist.

Anmerkungen:

  • Führen Sie zum Drucken der Datei Folgendes aus: catoder PlistBuddy -x -c Print /Library/LaunchAgents/com.launchd.maxfiles.plist.
  • Um zu überprüfen , das Protokoll für Fehler beim Laden zu starten, führen tail -f /var/log/system.log.
  • Um die aktuellen siehe launchdGrenzen laufen: launchctl limit.
  • Die .plistDatei kann in einem benutzer- oder systemweiten Agentenordner abgelegt werden ( LaunchAgents). Siehe: man launchdund man launchd.plist, oder dies oder die Antwort für weitere Details.

Kernel-Grenzen

Bitte beachten Sie, dass die obigen Launchd- Systemgrenzen immer noch vom Kernel begrenzt werden. Daher können Sie sie nicht höher als die in den Kernel-Statusvariablen festgelegten tatsächlichen Grenzen einstellen (siehe: man sysctlHilfe).

Um die aktuellen Kernel Grenzen zu sehen, laufen: sysctl -a | grep ^kern.max.

Um die Erhöhung zu maxfilesbegrenzen, führen: sudo sysctl -w kern.maxfiles=20480.

Verwenden Sie die ähnliche Methode, um Startdateien zu .plisterstellen, z

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"

Shell Grenzen

Fügen Sie für Shell-Beschränkungen relevante ulimitBefehle zu ~/.bashrcoder ~/.bash_profileStartdateien für einzelne Benutzer oder /etc/bashrcfür alle Benutzer hinzu. Siehe: Wie füge ich Einstellungen für die dauerhafte Shell-Begrenzung auf einem Mac hinzu?

Vorgeschlagene Zeilen zum Hinzufügen:

# Changes the ulimit limits.
ulimit -Sn 4096      # Increase open files.
ulimit -Sl unlimited # Increase max locked memory.
Kenorb
quelle
1
Seien Sie besonders vorsichtig, maxprocda das Hard-Kernel-Limit für diesen Parameter standardmäßig 1064 ist, was bedeutet, dass er auf 2000 oder "Unbegrenzt" gesetzt maxprocperuid < maxprocwird System mit maxprocperuid=2000und maxproc=1064was gefährlich ist. Lesen Sie hier mehr darüber .
Old Pro