Wenn auf meinem Desktop nicht mehr genügend Arbeitsspeicher zur Verfügung steht und häufig Daten ausgetauscht werden, kann ich die Anwendung freigeben oder beenden, wodurch mein Arbeitsspeicher verschwendet wird. Aber nachdem alle meine Desktops / Anwendungen ausgetauscht wurden und schrecklich langsam sind, kennen Sie eine Möglichkeit, meine Desktops / Anwendungen "auszutauschen" (aus dem Auslagerungsspeicher in den Arbeitsspeicher zu laden)?
20
swapon
/ auszutauschenswapoff
(wie es die derzeit akzeptierte Antwort nahelegt), möchten Sie möglicherweise Ihren Display Manager und alle untergeordneten Elemente enttauschen, indem Sie deren Prozessspeicher entleeren (wodurch das Enttauschen erzwungen wird). Siehe auch „So erzwingen Sie das Einlagern eines ausgelagerten zsh-Prozesses?“ Beim Stapelüberlauf.Antworten:
Wenn Sie wirklich wieder genügend RAM zur Verfügung haben, können Sie diese Sequenz (als root) verwenden:
(um das explizite Einlagern all Ihrer Anwendungen zu erzwingen)
(unter der Annahme, dass Sie Linux verwenden)
quelle
Das folgende schnelle Python-Skript speichert den Speicher eines Prozesses in stdout. Dies hat den Nebeneffekt, dass ausgelagerte Seiten oder zugeordnete Dateien geladen werden. Nennen Sie es als
cat_proc_mem 123 456 789
wo die Argumente Prozess-IDs sind.Dieses Skript ist völlig Linux-spezifisch. Es ist möglicherweise anpassbar an andere Systeme mit einer ähnlichen
/proc
Struktur (Solaris?), Aber vergessen Sie nicht, es unter z. B. * BSD auszuführen. Selbst unter Linux müssen Sie möglicherweise die Definitionc_pid_t
und die Werte vonPTRACE_ATTACH
und ändernPTRACE_DETACH
. Dies ist ein Proof-of-Principle-Skript, das nicht als Beispiel für eine gute Programmierpraxis gedacht ist. Benutzung auf eigene Gefahr.Linux stellt den Speicher eines Prozesses zur Verfügung als
/proc/$pid/mem
. Nur bestimmte Adressbereiche sind lesbar. Diese Bereiche können durch Lesen der Speicherzuordnungsinformationen aus der Textdatei ermittelt werden/proc/$pid/maps
. Die Pseudodatei/proc/$pid/mem
kann nicht von allen Prozessen gelesen werden, die die Berechtigung zum Lesen haben: Der Reader-Prozess muss aufgerufen habenptrace(PTRACE_ATTACH, $pid)
.Siehe auch weitere Informationen über
/proc/$pid/mem
.quelle
kill -CONT 1234
wobei 1234 die PID ist), um es fortzusetzen .Der Vollständigkeit halber kann GDB das Prozessabbild sichern. Ich habe nicht überprüft, ob es das Auslagern aufhebt, aber es muss --- es gibt keine andere Möglichkeit, den gesamten Prozessspeicher auszulesen:
gdb -p $mypid
gefolgt von
(gdb) gcore /tmp/myprocess-core
Saved corefile /tmp/myprocess-core
quelle
gcore $pid
ist auch außerhalb von gdb verfügbar (als kleines Wrapper-Skript)gdb --batch -p $pid -ex "gcore /dev/null" 2>/dev/null
Mit swapon / swapoff wird Ihr Swap-Speicherplatz vollständig freigegeben, Sie können jedoch auch einen Teil davon über das / proc-Dateisystem freigeben. Du willst den ersten:
über http://linux-mm.org/Drop_Caches
quelle
sysctl vm.drop_caches=X
. Außerdem ist sysctl einfacher zu sudo.