Möglichkeit zu begrenzen, wie viel RAM ein beliebiger Prozess belegen kann?

12

Nehmen wir an, wir haben einen OS X-Computer mit 4 GB RAM. Ist es möglich, es so einzurichten, dass kein einzelner Prozess mehr als beispielsweise 3 GB beanspruchen kann. Unabhängig davon, wie viel Speicher ein Prozess beansprucht, bleibt immer etwas Speicher übrig, damit das System reagiert?

Fomite
quelle
6
Nein, und das wäre kontraproduktiv. Die RAM-Zuweisung für das Mikromanagement ist nicht das, worauf Betriebssysteme ausgelegt sind. Freier RAM ist verschwendeter RAM. Aus dem vermeintlich schlechten RAM-Management von OS X wird zu viel gemacht. Das Schließen des Aktivitätsmonitors und das Fortfahren mit Ihrem Leben scheint das beste Mittel zu sein.
8
@cksum In Ihrem Kommentar gibt es eine Reihe von Annahmen, von denen die meisten falsch sind. Ich versuche nicht, die Speicherverwaltung von OS X in den Hintergrund zu rücken. Was ich tatsächlich tue, ist herauszufinden, ob es eine Möglichkeit gibt, genügend Systemfunktionalität beizubehalten, während ich Code teste, der sich ziemlich leicht in einen außer Kontrolle geratenen Prozess verwandelt. Weil freier Arbeitsspeicher kein verschwendeter Arbeitsspeicher ist, wenn Sie damit Fehler beheben können.
Fomite
3
Entschuldigung, aber wenn sich Ihre Frage auf die Programmierung (Entwicklung und Prüfung) von Anwendungen bezieht, ist sie für dieses Forum nicht zum Thema. Bitte werfen Sie einen Blick auf die FAQ für weitere Informationen darüber, welche Art von Fragen hier gehören: apple.stackexchange.com/faq
10
FFS, das ist keine Programmierfrage. Es ist eine OS-Frage. Die Einschränkung des Speichers, den ein beliebiger Prozess verwenden kann - Safari, Matlab, Call of Duty, was auch immer - auf Betriebssystemebene ist eindeutig eine Betriebssystemfrage.
Fomite
7
Als Website für "Apple-Enthusiasten und Power-User" sind Fragen, die sich im Wesentlichen auf den virtuellen Speicher beziehen, eindeutig begrenzt und thematisch. Selbst wenn die Entwicklung im Zusammenhang steht, gilt dies für Optimierungs- oder Leistungsprobleme.
bmike

Antworten:

9

Eine ähnliche Frage wird hier gestellt. Wie kann ich die RAM-Menge begrenzen, die eine Mac OS-Anwendung verwenden kann?

Sie empfehlen die Verwendung des Befehls ulimit , konnten den Betrag jedoch nicht erfolgreich auf das gewünschte Maß beschränken. Ich denke, das Problem, auf das sie gestoßen sind, war die Tatsache, dass die Option -u oder -v nicht für das Speicher-Paging-System verantwortlich war, z. B. können Sie nur X Speicherplatz für Ihren Prozess in echtem RAM zuweisen, aber wir können blättern Sie den ganzen Tag in den virtuellen Speicher.

Beachten Sie, dass dies eine gefährliche Deaktivierung des virtuellen Speichers sein kann. Dies kann dazu führen, dass Ihr Mac nur abstürzt usw., wenn kein RAM mehr vorhanden ist.

Versuchen Sie, ulimit mit den Argumenten -l, -m oder -v auszuführen, jedoch wie in der ulimit-Manpage angegeben, bis zum Betriebssystem, ob diese Einstellungen beachtet werden oder nicht.

ulimit: ulimit [-SHacdefilmnpqrstuvx] [limit]

Ändern Sie die Shell-Ressourcenlimits.

Bietet Kontrolle über die Ressourcen, die der Shell und den von ihr erstellten Prozessen zur Verfügung stehen, auf Systemen, die eine solche Kontrolle ermöglichen.

Es kann keine eindeutige Quelle gefunden werden, die bestätigt, ob OS X ulimit ignoriert oder nicht, aber nachdem das referenzierte ulimit fehlgeschlagen ist

Wenn Sie ulimit dazu bringen können, selbstständig für Ihre Anforderungen zu arbeiten, probieren Sie es aus. Wenn dies nicht der Fall ist, können Sie mit einer Kombination aus ulimit und / oder Deaktivieren des virtuellen Speichers möglicherweise diese 3-GB-Grenze für ausgewählte Prozesse festlegen. Zu Ihrer Information: Hier finden Sie einen guten Link für weitere Informationen zum vollständigen Deaktivieren des virtuellen Speichers in Snow Leopard System 10.6

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
MrDaniel
quelle
Dies scheint die wahrscheinlich richtige Antwort zu sein - ich werde es ausprobieren, wenn ich das nächste Mal dies ausführe. Vorerst die Antwort annehmen.
Fomite
5

Wenn Sie Lion (oder einen neueren OSX) Server auf Ihrem Mac ausführen, können Sie OSX möglicherweise in einer VM (VirtualBox, Parallels oder VMWare usw.) auf diesem Mac ausführen. Beschränken Sie die VM auf 3 GB physischen RAM, und jede App oder jeder Prozess in der VM ist ebenfalls so eingeschränkt. Das System, auf dem sich die VM befindet, sollte auch dann reaktionsfähig bleiben, wenn das Betriebssystem in der VM auf Backing-Swap-Festplatten beschränkt ist oder abstürzt.

Wenn Sie einen möglicherweise außer Kontrolle geratenen Prozess debuggen, können Sie möglicherweise in die VM ssh, um den Debugger oder einen Debug-Nub über die Befehlszeile auszuführen und Dinge zu protokollieren, bis die Dinge abstürzen.

hotpaw2
quelle