Desde +22,04 LTS

Desde +22,04 LTS

A veces trabajo con grandes cantidades de datos que quiero mantener en la memoria para procesarlos. A veces calculo mal la cantidad de memoria que producirá mi programa, o un depurador multiplica el uso de memoria por un factor que excede mi memoria disponible.

Cada vez que inicio un proceso que consume mucha memoria, esto es lo que esperaría de un sistema operativo sensato: intentar consumir toda la memoria libre, luego pedir amablemente a otros procesos no esenciales que cedan algo de memoria que no necesitan, luego escribir para intercambiar.

Esto es lo que Ubuntu hace por mí: consumir toda la memoria libre, luego pedirle al sistema operativo que intercambie todos los servicios esenciales (sesión de gnome, terminal, teclado), luego congelar y esperar a que desconecte la alimentación.

Dos preguntas:

  1. ¿Cómo puede un sistema operativo asumir que algo podría ser tan importante que está bien dejar de escuchar las aportaciones del usuario?
  2. ¿Cómo puedo decirle a Ubuntu que nunca intercambie servicios esenciales y que siempre reaccione a las entradas del usuario, incluso si algún proceso estúpido intenta consumir más recursos de los que proporciona el sistema?

Respuesta1

Todavía no tengo una solución para el problema, pero puedo ofrecer dos soluciones que podrían ser de interés para otros:

1)habitación temprana

Es un servicio que vigila el uso de la memoria y finaliza el proceso que consume la mayor cantidad de memoria cuando se alcanza un cierto umbral (ver tambiénesteyestepregunta sobre el asesino OOM en el kernel de Linux)

Lo probé con un proceso de demostración que solicita memoria de forma indefinida en pequeños fragmentos. Esta es mi primera impresión: cuando inicio el proceso fraudulento, rápidamente consume toda mi RAM. Luego comienza el intercambio y el sistema deja de responder. Unos segundos más tarde, el sistema vuelve a estar en línea. El registro de earlyoom muestra que detuvo el proceso de consumo de memoria después de que el uso de la memoria y el intercambio alcanzaron el 90%.

Todavía existe el molesto retraso cuando comienza el intercambio y después de que se finaliza el proceso, algunas partes de otros procesos generalmente permanecen en intercambio hasta que se solicitan, pero es un comienzo.

2) simplemente deshabilite el intercambio

Sé que esto es untema controvertido, pero para los sistemas de escritorio y especialmente las máquinas de desarrollo, donde de vez en cuando puede suceder que un proceso intente consumir toda la memoria, tiene sentido: sin intercambio, el asesino OOM simplemente funciona según lo previsto. Cuando te quedas sin memoria, encuentra elmejor proceso para matary se deshace de él. Sin retrasos ni demoras.

Puede desactivar el intercambio para la sesión actual con sudo swapoff -aohacer que el cambio sea permanente.


La solución adecuada para el problema sería, por supuesto, que el sistema siga respondiendo cuando la memoria principal se agote y comience a intercambiar memoria como si no hubiera un mañana, pero eso no parece que vaya a suceder pronto.

Respuesta2

Desde +22,04 LTS

Hay un servicio llamado systemd-oomd que monitoreará automáticamente el uso de la memoria e intentará finalizar los procesos cuando no haya memoria y está instalado de forma predeterminada como parte de systemd. Para ver el tipo de estado actual oomctl. Salida de ejemplo:

Dry Run: no
Swap Used Limit: 90.00%
Default Memory Pressure Limit: 60.00%
Default Memory Pressure Duration: 20s
System Context:
        Memory: Used: 4.1G Total: 15.5G
        Swap: Used: 1.0G Total: 3.9G
Swap Monitored CGroups:
        Path: /
                Swap Usage: (see System Context)
Memory Pressure Monitored CGroups:
        Path: /user.slice/user-1000.slice/[email protected]
                Memory Pressure Limit: 50.00%
                Pressure: Avg10: 0.00 Avg60: 0.02 Avg300: 0.00 Total: 9s
                Current Memory Usage: 3.9G
                Memory Min: 0B
                Memory Low: 0B
                Pgscan: 23663084
                Last Pgscan: 23663084

De forma predeterminada, comience a recuperar un uso del 90 % tanto de la memoria como del intercambio. Utiliza presión de memoria en grupos de control de sectores de usuario (es decir,[correo electrónico protegido]) que es donde se generan la mayoría de las aplicaciones, pero no en el grupo de control system.slice, que genera los componentes más cruciales del sistema, como NetworkManager y Gnome Display Manager. En resumen, oomd liberará los procesos del usuario antes que los del sistema. Para ver la configuración actual de systemd-oomd, escriba:

systemd-analyze cat-config systemd/oomd.conf

Referirse aesta páginapara obtener una referencia sobre lo que hacen. Para editar los parámetros OOM de una unidad systemd específica, agregue o edite las variables especificadasaquíen el archivo de la unidad.

Respuesta3

Pruebe una de dos cosas:

1) cambie la configuración de intercambio de su configuración predeterminada de 60 a 10,es decir: agregarvm.intercambio = 10a /etc/sysctl.conf(en la terminal, escriba sudo gedit /etc/sysctl.conf), luego reinicie el sistema. Busque aquí swappiness para obtener más información al respecto.

2) Si el intercambio no ayuda... aunque no quieras... aumenta el tamaño de tu archivo de intercambio a 1,5x16G y comprueba si eso ayuda.

Mantenme informado. Saludos, Al

información relacionada