Ich möchte, dass mein Python-Skript den gesamten verfügbaren freien RAM verwendet, aber nicht mehr (aus Effizienzgründen). Ich kann dies kontrollieren, indem ich nur eine begrenzte Menge an Daten einlese, aber ich muss wissen, wie viel RAM zur Laufzeit frei ist, um das richtig zu machen. Es wird auf einer Vielzahl von Linux-Systemen laufen. Ist es möglich, das freie RAM zur Laufzeit zu bestimmen?
Sie könnten einfach /proc/meminfo
vorlesen. Beachten Sie, dass der "freie Speicher" normalerweise ziemlich niedrig ist, da das Betriebssystem viel freien, ungenutzten Speicher für das Caching verwendet.
Außerdem ist es am besten, wenn Sie nicht versuchen, die Speicherverwaltung Ihres Betriebssystems zu überlisten. Das endet normalerweise in Tränen (oder langsameren Programmen). Besser nehmen Sie nur den RAM, den Sie brauchen. Wenn Sie so viel wie möglich auf einer Maschine mit einer bisher unbekannten Speicherkapazität verwenden möchten, würde ich wahrscheinlich prüfen, wie viel RAM installiert ist ( MemTotal
in /proc/meminfo
), einen bestimmten Betrag für das Betriebssystem und als Sicherheitsabstand (sagen 1 GB) und den Rest verwenden.
Auf Linux-Systemen verwende ich das von Zeit zu Zeit:
%Vor%Sie können dies ausführen, wenn Ihr Skript gestartet wird. RAM wird normalerweise auf einem ausgelasteten System häufig verwendet und freigegeben. Sie sollten dies also berücksichtigen, bevor Sie entscheiden, wie viel RAM zu verwenden ist. Außerdem haben die meisten Linux-Systeme einen Swappiness-Wert von 60. Bei der Verwendung von Speicher werden Seiten, die am wenigsten verwendet werden, ausgelagert. Sie können SWAP anstelle von RAM verwenden.
Hoffe, das hilft.
Da das ursprüngliche Poster geschrieben hat, dass der Code auf einer Vielzahl von Linux -Systemen laufen sollte, poste ich hier eine objektorientierte Lösung für die Linux-Speicherabfrage. psutil ist eine großartige Bibliothek, aber wenn Sie sie aus irgendeinem Grund nicht installieren können, können Sie einfach die folgende Lösung verwenden:
Beispielverwendung:
%Vor%Code:
%Vor%Ich nehme an, Sie könnten kostenlos ( Ссылка ) verwenden. , ps oder vielleicht die Klasse MemoryMonitor aus dem SO-Thread, die am Ende meiner Antwort steht, um dies zu tun. Machen Sie einfach etwas Spielraum und lassen Sie eine kleine Menge von RAM für andere Prozesse ungenutzt, wenn sie dringend benötigt werden, um Festplatten-Schreibvorgänge in ihrem Namen zu vermeiden.
Sie müssen die Ausgabe von free oder ps analysieren, wenn Sie das verwenden, aber das sollte nicht schwer sein. Denken Sie daran, dass Sie die verfügbare RAM-Echtzeit analysieren müssen, damit Sie einstellen können, ob ein anderer Prozess aus irgendeinem Grund Speicherhungrig wird.
siehe auch diesen Thread: Wie erhält man die aktuelle CPU- und RAM-Auslastung in Python?
Tags und Links python memory-management