Ich hatte kürzlich Datenverlust, weil die Festplatte vollständig vom virtuellen Speicher belegt war und einige Programme nicht mit null freiem Speicherplatz auf der Festplatte umgehen konnten. Wie kann ich dies verhindern (außer immer ein paar GB als Puffer zu behalten)?
Ich kann Ihnen eine Möglichkeit vorschlagen, dies zu tun, obwohl sie nicht vollständig ist.
Sie können das Speicherlimit pro Prozess mit festlegen launchctl limit
(siehe Manpage ). Dies ist jedoch pro Prozess nicht systemweit.
Im wirklichen Leben verbrauchen nur wenige Prozesse eine große Menge an Speicher. Daher würde ich Ihnen raten, sich die Ausgabe anzusehen Activity Monitor
und zu sehen, welche Prozesse am meisten verbrauchen. Zählen Sie diejenigen, die mehr als 20 % Ihres Arbeitsspeichers verwenden. Wie viele solcher Prozesse haben Sie? Nehmen wir n an und gehen davon aus, dass Sie m GB RAM haben. Wie viel maximalen Auslagerungsbereich möchten Sie verwenden? Nehmen wir an , s GB Swap.
Ich würde folgende Rechnung machen:(m + s - 1) / n = <max memory per process in GB>
Konvertieren Sie die GB in B:<max memory per process in GB> * 1024 * 1024 * 1024 = <max mem per proc in B>
Probieren Sie nun dieses Limit aus und prüfen Sie, ob es funktioniert (beachten Sie, dass diese Einstellung nach einem Neustart verloren geht, daher ist die Ausführung "sicher"):
sudo launchctl limit rss <max mem per proc in B> <max mem per proc in B + 1073741824>
Wenn Sie mit dieser Wahl zufrieden sind, können Sie sie speichern, damit sie dauerhaft sind. Bearbeiten Sie die Datei /etc/launchd.conf
und fügen Sie hinzu:
limit rss <max mem per proc in B> <max mem per proc in B + 1073741824>
Graham Perrin