Si mi escritorio se queda sin memoria y se intercambia mucho, entonces libero o elimino la aplicación desperdiciando mi RAM. Pero, después de eso, todos mis escritorios / aplicaciones han sido intercambiados y son horriblemente lentos, ¿conoces una forma de "desenterrar" (recargar desde el espacio de intercambio a la RAM) mis escritorios / aplicaciones?
20
swapon
/swapoff
(como sugiere la respuesta actualmente aceptada), es posible que desee cancelar el intercambio de su administrador de pantalla y todos sus elementos secundarios al volcar sus memorias de proceso (lo que fuerza el cambio). Consulte también "¿Cómo forzar el intercambio de un proceso zsh intercambiado?" En stackoverflow.Respuestas:
Si realmente tiene suficiente RAM disponible nuevamente, puede usar esta secuencia (como root):
(para forzar el intercambio explícito de todas sus aplicaciones)
(suponiendo que está utilizando Linux)
fuente
El siguiente script de Python rápido y sucio volca la memoria de un proceso en stdout. Esto tiene el efecto secundario de cargar cualquier página intercambiada o archivo asignado. Llámelo como
cat_proc_mem 123 456 789
donde los argumentos son ID de proceso.Este script es completamente específico para Linux. Puede ser adaptable a otros sistemas con una
/proc
estructura similar (Solaris?), Pero olvídate de ejecutarlo, por ejemplo, * BSD. Incluso en Linux, es posible que deba cambiar la definiciónc_pid_t
y los valores dePTRACE_ATTACH
yPTRACE_DETACH
. Este es un script de prueba de principio, no como un ejemplo de buenas prácticas de programación. Úselo bajo su propio riesgo.Linux hace que la memoria de un proceso esté disponible como
/proc/$pid/mem
. Solo ciertos rangos de direcciones son legibles. Estos rangos se pueden encontrar leyendo la información de asignación de memoria del archivo de texto/proc/$pid/maps
. El pseudoarchivo/proc/$pid/mem
no puede ser leído por todos los procesos que tienen permiso para leerlo: el proceso del lector debe haber llamadoptrace(PTRACE_ATTACH, $pid)
.Ver también más información sobre
/proc/$pid/mem
.fuente
kill -CONT 1234
donde 1234 es el PID) para reanudarlo.Solo para completar, GDB puede volcar la imagen del proceso. No verifiqué que lo intercambia, pero tiene que hacerlo --- no hay otra forma de leer la memoria completa del proceso:
gdb -p $mypid
seguido de
(gdb) gcore /tmp/myprocess-core
Saved corefile /tmp/myprocess-core
fuente
gcore $pid
también está disponible fuera de gdb (como un script de contenedor pequeño)gdb --batch -p $pid -ex "gcore /dev/null" 2>/dev/null
swapon / swapoff borrará completamente su espacio de intercambio, pero también puede liberar parte del mismo a través del sistema de archivos / proc. Quieres el primero:
a través de http://linux-mm.org/Drop_Caches
fuente
sysctl vm.drop_caches=X
. Además, sysctl es más fácil de sudo.