¿Qué es la memoria de intercambio?

26

Estoy usando RAM para almacenar algunas de las tablas de mi base de datos y las otras están almacenadas en el disco duro.

Hoy llegué a saber que mis procesos están utilizando memoria de intercambio. Ahora, ¿qué es la memoria de intercambio y cómo puedo detectar qué proceso está usando la memoria de intercambio y cómo puedo evitar que la usen?

030
fuente
¿No hay forma de averiguar qué procesos están utilizando la memoria de intercambio?
mire el administrador de tareas de Windows (o herramientas similares) para ver la cantidad de archivos de página utilizados y las fallas de página.
El intercambio no es algo por proceso, es para todo el sistema operativo. "vmstat" le mostrará información sobre cuánto intercambio está utilizando.
jrockway el
Trabajo en Linux, no en Wimdows
obtuve la razón de este uso de intercambio ... alguien estaba tratando de analizar mi sitio por eso todo sucedía sin ninguna causa de nuestra parte. Gracias a todos por sus respuestas, me ayudó mucho como siempre :-)

Respuestas:

41

Si se queda sin memoria física, usa memoria virtual, que almacena los datos en la memoria del disco. Leer desde el disco es varios órdenes de magnitud más lento que leer desde la memoria, por lo que esto ralentiza todo. (El intercambio de datos entre la memoria real y la memoria virtual es "intercambio". El espacio en el disco es "espacio de intercambio").

Si su aplicación está "usando intercambio", entonces necesita usar menos memoria o comprar más RAM.

(El intercambio es útil porque las aplicaciones que no se están usando se pueden almacenar en el disco hasta que se usen. Luego se pueden "paginar" y ejecutar normalmente de nuevo. Aunque no está en la memoria, el sistema operativo puede usar esa memoria para otra cosa, como caché de disco. Por lo tanto, es una característica muy útil, pero si no tiene suficiente memoria física para ejecutar su programa, definitivamente necesita más memoria. Afortunadamente, la memoria es realmente muy barata en estos días).

jrockway
fuente
1
En aras de la corrección: la memoria virtual significa el uso de direcciones de memoria virtual (algo que siempre está habilitado en una CPU moderna, sin importar la cantidad de RAM disponible que tenga) y no está directamente relacionado con el intercambio (aunque se usan en combinación, son conceptos básicamente diferentes).
fortran
@fortran, para doble corrección, memoria virtual es el término que Windows usa cuando se refiere al archivo de paginación (intercambio) .
sleblanc
7

Una computadora tiene una cierta cantidad de memoria física. Pero la mayoría de las veces queremos más. Entonces intercambiamos algo de memoria en el disco.

Cada vez que necesitamos esa memoria, es necesario volver a intercambiarla en la memoria (intercambiando alguna otra pieza). Existen algoritmos extremadamente inteligentes para minimizar el retraso, pero aún así a veces tenemos que esperar.

En Windows, si observa el administrador de tareas, puede mostrar los errores de la página de columna. Esto muestra el número de veces que una aplicación solicita un trozo de memoria que estaba en el disco y necesita intercambiarse. Muchas fallas de página = aplicación lenta.

Este proceso se usa en varios niveles. Un resumen de rápido a lento:

  • En el nivel de CPU, hay registros. Estas son las memorias más rápidas pero la cantidad es limitada.
  • También en la CPU hay una pequeña memoria caché. Aquí se almacena una pequeña parte del programa en ejecución para un acceso rápido. Busque algoritmos de predicción de rama si desea saber más.
  • A veces hay cachés de nivel 2 entre la CPU y la memoria principal.
  • El siguiente nivel es la memoria principal (RAM).
  • El último nivel y el más lento de todos es el disco, a veces puedes usar memorias USB como memoria extra.
Toon Krijthe
fuente
3
cat /proc/pid/smaps

Si no desea usar el intercambio, no use una partición de intercambio (comente la línea /etc/fstab), pero eso evitará que comience un nuevo proceso y hará que Malloc falle si se queda sin memoria física. Esa no es una buena idea en general ... no es muy segura ni siquiera muy útil, ya que el sistema operativo mantendrá las páginas activas en la memoria y cambiará al disco aquellas que no se están utilizando recientemente.

Otra solución podría ser hackear la base de datos para que bloquee las páginas en la memoria (sé que se puede hacer, pero ahora no podría decir exactamente cómo), pero de todos modos, es probable que su base de datos use su propio intercambio y mecanismos de almacenamiento en caché.

Para saber qué es el intercambio y cómo funciona la memoria virtual ... Le recomiendo que eche un vistazo a algunas conferencias sobre el sistema operativo, tal vez el MIT Open Courseware podría ser de ayuda.

fortran
fuente
Dado que la configuración predeterminada en muchas distribuciones de Linux es comprometer en exceso la memoria, lo "peor" que sucederá es que el asesino de OOM comenzará los procesos de francotirador, lo más probable es que comience con el DBMS (y con tablas "almacenadas en la RAM" que probablemente no sea bueno) cosa).
symcbean
1

He encontrado una respuesta parcial. Una memoria de intercambio es un espacio en el disco duro de su computadora que los sistemas operativos usarán para poner la información que está realmente en la RAM para liberarla para otra aplicación. Esto debe hacerse cuando el sistema necesita memoria para un nuevo proceso y no hay ninguno, por lo que podemos ver que si nuestro sistema tiene mucha RAM, tal vez no necesite memoria SWAP.

ACTUALIZAR

Para averiguar dónde intercambiar espacio (o memoria virtual) puede ir al Administrador de tareas (CTRL + ALT + SUPR) y activar desde VER -> COLUMNAS -> MEMORIA VIRTUAL. Ahora solo calcule la diferencia entre el uso de memoria y la memoria virtual. También aquí hay una instrucción sobre cómo verlo si está ejecutando Vista: http://www.ehow.com/how_5067693_increase-swap-space.html

faya
fuente
-1

Swap es espacio en el disco duro utilizado como RAM. Es (relativamente hablando) muy lento, pero impide que las computadoras se bloqueen cuando intentan manejar más datos de los que su RAM puede manejar.

Para evitar que los procesos usen el intercambio, instale más RAM.

Quentin
fuente
1
Si no desea ningún intercambio, deje de usar un archivo de página. Pero espera otros problemas.
1
No es. El intercambio es mover un bloque de datos del disco duro a la memoria física. Una lectura única, que normalmente es lo suficientemente rápida.
@xtofl la respuesta no mencionó el intercambio, solo la partición de intercambio, y el comentario de gamecat no tuvo nada que ver con lo que dijiste. : P
RapidWebs
-1

Si no desea que sus procesos utilicen la memoria de intercambio, simplemente desactive la memoria de intercambio por completo. Desafortunadamente, si alguna vez se queda sin memoria, el kernel de Linux matará algunos de sus procesos en ejecución para liberar algo de memoria para su uso.

Si tiene suficiente RAM para su sistema, puede pasar sin memoria de intercambio.

Tengo una computadora portátil con 768Mb de RAM que no usa memoria de intercambio. Es lo suficientemente bueno para mis necesidades. Tengo un servidor con 256Mb de RAM y no usa memoria de intercambio. Está ejecutando 8 servidores virtuales utilizando la virtualización OpenVZ, sin problemas tampoco.

Por lo tanto, depende de usted si necesita memoria de intercambio.

sybreon
fuente
¿CÓMO está ejecutando 8 máquinas virtuales en una máquina con solo 256 megabytes de RAM?
warren
Es posible con VZ porque la RAM no está completamente particionada ya que las bibliotecas comunes se comparten entre las máquinas virtuales, o algo así. Entonces, 8 x 64M no es necesariamente 512M. :)
sybreon
no obstante, ¿cómo funciona el dispositivo subyacente de manera estable?
warren
Al intercambiar programas inactivos, tiene más memoria para el almacenamiento en caché de archivos. Y eso acelera las cosas. esta lectura única suele ser bastante rápida y tiene un efecto insignificante en general. no solo se usa cuando se sale de los límites con respecto a la RAM disponible. He visto máquinas con 16GB de RAM usar SWAP a veces.
RapidWebs
Además, no recomendaría desactivar SWAP en un servidor de base de datos. ¿Sus clientes o su aplicación web no estarían muy satisfechos cuando OOM mata el back-end en una simple operación de copia de seguridad nocturna o algo similar? Sería más inteligente ajustar el caché de la base de datos en relación con el uso de la aplicación y la memoria disponible. si ya está intercambiando, necesita más ram o configurar mejor su servidor de base de datos. de lo contrario, deshabilitar SWAP obligaría a OOM a matar el servidor de DB cada vez que vaya a intercambiar. que a juzgar por su pregunta, es a menudo.
RapidWebs