Cómo comprobar si se han establecido límites de memoria del kernel en Linux

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, exploraremos cómo verificar y comprender los límites de memoria del kernel en Linux. Nos centraremos en la configuración vm.overcommit_memory, que controla cómo el kernel maneja las solicitudes de asignación de memoria.

A través de pasos prácticos, aprenderás a usar el comando sysctl para ver y modificar temporalmente este parámetro del kernel, verificar la configuración de memoria inspeccionando el directorio /proc/sys/vm e identificar los archivos de configuración persistente del kernel dentro de /etc/sysctl.d. Este laboratorio proporcionará experiencia práctica en la gestión y comprensión del comportamiento de la memoria en Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/SystemInformationandMonitoringGroup -.-> linux/service("Service Managing") linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") linux/UserandGroupManagementGroup -.-> linux/export("Variable Exporting") subgraph Lab Skills linux/ls -.-> lab-558795{{"Cómo comprobar si se han establecido límites de memoria del kernel en Linux"}} linux/cat -.-> lab-558795{{"Cómo comprobar si se han establecido límites de memoria del kernel en Linux"}} linux/service -.-> lab-558795{{"Cómo comprobar si se han establecido límites de memoria del kernel en Linux"}} linux/env -.-> lab-558795{{"Cómo comprobar si se han establecido límites de memoria del kernel en Linux"}} linux/export -.-> lab-558795{{"Cómo comprobar si se han establecido límites de memoria del kernel en Linux"}} end

Verificar límites de memoria con sysctl vm.overcommit

En este paso, exploraremos cómo Linux gestiona la asignación de memoria, centrándonos específicamente en la configuración vm.overcommit_memory utilizando el comando sysctl.

El comando sysctl se utiliza para modificar parámetros del kernel en tiempo de ejecución. Estos parámetros a menudo se almacenan en el directorio /proc/sys/. El parámetro vm.overcommit_memory controla cómo el kernel maneja las solicitudes de memoria que exceden la RAM física disponible.

Hay tres valores posibles para vm.overcommit_memory:

  • 0: Sobrealocación heurística. El kernel intenta estimar si una solicitud de asignación de memoria es posible. Esta es la configuración predeterminada.
  • 1: Siempre sobrealocar. El kernel siempre concede las solicitudes de asignación de memoria, incluso si exceden la memoria disponible. Esto puede hacer que los procesos se terminen más tarde si realmente intentan usar la memoria.
  • 2: Nunca sobrealocar. El kernel no concederá solicitudes de asignación de memoria si exceden el espacio total de intercambio (swap) disponible más un porcentaje configurable de la RAM física.

Vamos a verificar el valor actual de vm.overcommit_memory. Abre tu terminal y escribe el siguiente comando:

sysctl vm.overcommit_memory

Presiona Enter.

Deberías ver una salida similar a esta:

vm.overcommit_memory = 0

Esta salida muestra que la configuración actual de vm.overcommit_memory es 0, lo que significa que el kernel está utilizando la sobrealocación heurística.

Comprender esta configuración es importante para gestionar los recursos del sistema y prevenir errores de falta de memoria en ciertas aplicaciones.

Ahora, intentemos cambiar este valor temporalmente. Podemos hacer esto utilizando sudo sysctl -w. La bandera -w te permite escribir un nuevo valor en un parámetro del kernel.

Escribe el siguiente comando para establecer vm.overcommit_memory en 1:

sudo sysctl -w vm.overcommit_memory=1

Presiona Enter.

Deberías ver una salida que confirme el cambio:

vm.overcommit_memory = 1

Ahora, verifiquemos el valor nuevamente para confirmar que ha cambiado:

sysctl vm.overcommit_memory

Presiona Enter.

La salida ahora debería mostrar:

vm.overcommit_memory = 1

Ten en cuenta que los cambios realizados con sysctl -w son temporales y se restablecerán cuando el sistema se reinicie. Exploraremos cómo hacer estos cambios permanentes en un paso posterior.

Haz clic en Continuar para pasar al siguiente paso.

Verificar la configuración de memoria en /proc/sys/vm

En el paso anterior, utilizamos el comando sysctl para verificar y cambiar el parámetro del kernel vm.overcommit_memory. Ahora, veamos dónde se almacenan realmente estos parámetros en el sistema de archivos.

Linux expone los parámetros del kernel a través de un sistema de archivos virtual ubicado en /proc/sys. Este sistema de archivos no contiene archivos reales en el disco, sino que proporciona una interfaz para interactuar con el kernel en ejecución.

Los parámetros relacionados con la memoria se encuentran en el directorio /proc/sys/vm/. Podemos usar el comando ls para listar los archivos en este directorio.

Abre tu terminal y escribe el siguiente comando:

ls /proc/sys/vm/

Presiona Enter.

Verás una lista de archivos, cada uno de los cuales representa un parámetro del kernel relacionado con la memoria virtual. La salida se verá similar a esta (los archivos exactos pueden variar ligeramente dependiendo de la versión del kernel):

admin_reserve_kbytes            hugetlb_shm_group             oom_kill_allocating_task
block_dump                      laptop_mode                   oom_score_adj
compact_hueristics              lowmem_reserve_ratio          overcommit_memory
compact_memory                  max_map_count                 overcommit_ratio
... (muchos más archivos)

Observa el archivo llamado overcommit_memory. Este archivo contiene el valor actual del parámetro vm.overcommit_memory con el que estuvimos trabajando en el paso anterior.

Podemos usar el comando cat para ver el contenido de este archivo. Recuerda que establecimos el valor en 1 en el paso anterior.

Escribe el siguiente comando:

cat /proc/sys/vm/overcommit_memory

Presiona Enter.

La salida debería ser:

1

Esto confirma que el valor que establecimos usando sysctl -w se refleja en el archivo /proc/sys/vm/overcommit_memory.

También puedes ver otros parámetros relacionados con la memoria en este directorio usando cat. Por ejemplo, para ver la proporción de sobreasignación (overcommit ratio):

cat /proc/sys/vm/overcommit_ratio

Presiona Enter.

La salida mostrará la proporción de sobreasignación actual, que se utiliza cuando vm.overcommit_memory está establecido en 2.

50

Explorar los archivos en /proc/sys/vm/ es una excelente manera de entender los diversos parámetros del kernel que controlan la gestión de memoria en Linux.

Haz clic en Continuar para pasar al siguiente paso.

Inspeccionar la configuración de sysctl en /etc/sysctl.d

En los pasos anteriores, aprendimos cómo verificar y cambiar temporalmente los parámetros del kernel utilizando sysctl y cómo estos parámetros se reflejan en el sistema de archivos /proc/sys. Sin embargo, los cambios realizados con sysctl -w no son permanentes. Para que los cambios en los parámetros del kernel persistan después de reiniciar el sistema, necesitamos configurarlos en archivos de configuración específicos.

La ubicación principal para las configuraciones persistentes de sysctl es el archivo /etc/sysctl.conf. Además, los sistemas Linux a menudo utilizan el directorio /etc/sysctl.d/ para almacenar fragmentos de configuración en archivos separados. Este enfoque modular facilita la gestión de configuraciones para diferentes aplicaciones o componentes del sistema.

Vamos a inspeccionar el contenido del directorio /etc/sysctl.d/. Podemos usar el comando ls para listar los archivos dentro de este directorio.

Abre tu terminal y escribe el siguiente comando:

ls /etc/sysctl.d/

Presiona Enter.

Verás una lista de archivos de configuración. Estos archivos suelen tener la extensión .conf. La salida podría verse algo así:

10-console-messages.conf  10-kernel-hardening.conf  10-tcp-congestion-control.conf  99-sysctl.conf

Cada uno de estos archivos puede contener configuraciones de parámetros de sysctl en el formato parámetro = valor. Cuando el sistema arranca, lee /etc/sysctl.conf y luego todos los archivos en /etc/sysctl.d/ en orden alfabético para aplicar las configuraciones persistentes de los parámetros del kernel.

Vamos a ver el contenido de uno de estos archivos de configuración, por ejemplo, 10-kernel-hardening.conf. Podemos usar el comando cat para mostrar su contenido.

Escribe el siguiente comando:

cat /etc/sysctl.d/10-kernel-hardening.conf

Presiona Enter.

Verás los parámetros del kernel configurados en este archivo. El contenido variará, pero podría incluir configuraciones relacionadas con la seguridad o el comportamiento del sistema.

#
## Configuraciones de sysctl para endurecimiento del kernel
#

## Deshabilitar espacios de nombres de usuarios no privilegiados
kernel.unprivileged_userns_clone=0

## Proteger contra ataques de enlaces simbólicos
fs.protected_hardlinks=1
fs.protected_symlinks=1

## Deshabilitar kexec
kernel.kexec_load_disabled=1

## Deshabilitar JIT de bpf
net.core.bpf_jit_enable=0

## Deshabilitar acceso ptrace a otros procesos
kernel.yama.ptrace_scope=1

Puedes ver cómo se establecen parámetros del kernel como kernel.unprivileged_userns_clone y fs.protected_hardlinks aquí.

Para hacer permanente nuestra configuración vm.overcommit_memory=1, normalmente agregaríamos la línea vm.overcommit_memory = 1 a un archivo nuevo o existente en /etc/sysctl.d/ (o en /etc/sysctl.conf). Sin embargo, con fines de este laboratorio introductorio, no haremos este cambio permanente.

Comprender el directorio /etc/sysctl.d/ es crucial para configurar parámetros persistentes del kernel en tu sistema Linux.

Haz clic en Continuar para completar este laboratorio.

Resumen

En este laboratorio, aprendimos cómo verificar y comprender los límites de memoria del kernel en Linux, centrándonos específicamente en la configuración vm.overcommit_memory. Utilizamos el comando sysctl para ver el valor actual de este parámetro, que controla cómo el kernel maneja las solicitudes de asignación de memoria que exceden la RAM física disponible. Exploramos los tres valores posibles (0, 1 y 2) y sus implicaciones para la gestión de memoria. También practicamos cambiar temporalmente el valor de vm.overcommit_memory utilizando sudo sysctl -w.

Además, verificamos las configuraciones de memoria del kernel inspeccionando el directorio /proc/sys/vm, que proporciona una interfaz de sistema de archivos para los parámetros del kernel. También aprendimos cómo identificar las configuraciones persistentes de los parámetros del kernel examinando los archivos dentro del directorio /etc/sysctl.d. Estos pasos brindaron una comprensión integral de cómo verificar y localizar las configuraciones de límites de memoria del kernel en un entorno Linux.