2016-06-15 12 views
2

Wie kann ich ein Programm verwenden virtuellen Speicher in Windows?Wie kann das Programm den virtuellen Speicher nutzen?

Ich habe eine lange Skript, das 6GB + Speicher verwendet und erhöht. Meine Maschine hat nur 8GB oder RAM. Es ist wahrscheinlich durch einen Speicherverlust in einem Modul verursacht, aber ich kann jetzt nichts dagegen tun.

Ist es möglich, virtuellen Speicher zu verwenden, oder wird dies nur von Windows gesteuert?

+0

Denken Sie daran, dass ein 32-Bit-Programm auf 2 oder 3 GB begrenzt ist, egal wie viel Speicher Sie haben. Sie benötigen wahrscheinlich eine 64-Bit-Version von Perl ('x64' in der Ausgabe von' perl -V: archname'), um zu dem Punkt zu gelangen, an dem Sie virtuellen Speicher verwenden. Dies geschieht automatisch, wenn Speicher benötigt wird. – ikegami

+0

@ikegami Dies ist definitiv 64-bit 'perl'. Momentan sitzt es bei * 7,17GB * verwendetem RAM * 8GB *. Ich hätte gedacht, dass es vor diesem Punkt in virtuellen Speicher wechseln sollte. – CJ7

+2

Offensichtlich ist physischer Speicher für alles besser als virtueller Speicher. Verzögert nicht die Festplatten-E/A oder die Prozesse, die sie verwenden. Es ist eine Win-Win-Situation. Warum sollte das Betriebssystem virtuellen Speicher verwenden, wenn es physisch verwendet werden kann und es bei Bedarf verschieben kann? – oldtechaa

Antwort

6

Das Betriebssystem stellt bei Bedarf virtuellen Speicher automatisch bereit und wenn es für Swap Space konfiguriert ist. Sie können das nicht von einem Perl-Programm aus steuern.

Wenn Ihr Perl-Programm irgendwann ein Speicherleck hat, wird es mit der Auslagerungsdatei ausgetauscht. Wenn der Speicherverbrauch dazu führt, dass der Gesamtspeicher die Summe aus physischem RAM und Auslagerungsdatei überschreitet, werden die Vorgänge verlangsamt und Prozesse können nicht mehr reagieren und/oder abstürzen.

In jedem Fall kann die Größe der Auslagerungsdatei nicht dynamisch geändert werden, ein Neustart ist erforderlich. Die einzige langfristige Lösung besteht darin, das Leck zu finden und zu beheben.

+0

Ich habe das Programm laufen lassen und es nähert sich sehr dem physischen Speicherlimit meiner Maschine. Ich möchte, dass es viel früher in die Auslagerungsdatei wechselt, damit es die Leistung des restlichen Systems nicht beeinträchtigt. Übrigens befindet sich das Speicherleck wahrscheinlich in einem importierten Modul. Es würde zu lange dauern, bis ich es gefunden habe. – CJ7

+0

Windows wird ausgetauscht, wenn es erforderlich ist. Sobald der gesamte festgeschriebene Speicher größer wird als der physische, sinkt die RAM-Leistung, insbesondere wenn in anderen Prozessen viel passiert. Dies ist unvermeidlich. –

+0

@ CJ7, es verlangsamt nichts, nur um in der Nähe der Grenze Ihres RAM zu sein. Und wenn es mehr braucht, dann wird es unbenutzte Blöcke Ihres Perl-RAMs in VM setzen und da ausgetretene Blöcke nicht benutzt werden, sollten Sie wenig Verlangsamung sehen. – oldtechaa