
En Ubuntu 22.04 tengo un problema extraño con la memoria. Parece que no puedo entender por qué mi uso de memoria es tan alto. Cuando inicio, el uso de la memoria de mi computadora portátil es el esperado, pero con el tiempo, algo parece consumir mi memoria, pero el sistema no parece saber para qué se usa.
Después de que la computadora portátil ha estado funcionando durante un par de días y ha estado en reposo durante la noche, free -m
informa lo siguiente:
total used free shared buff/cache available
Mem: 14812 7329 2683 1810 4799 5348
Swap: 2047 416 1631
Todas las solicitudes han sido cerradas y, segúnesta herramientaLa memoria acumulada utilizada por todas las aplicaciones es de 1,7 GiB. Entonces, ¿para qué se utilizan los últimos ~5,5 GiB (7,2-1,7)?
¿Me estoy perdiendo de algo?
Respuesta1
Esta respuesta está escrita en un intento de solucionar posibles causas del uso de memoria "no contabilizado", que pueden ir más allá de lo que está experimentando el OP.
Fondo
En Linux, el uso de memoria se puede atribuir en gran medida a dos elementos:
- Uso por procesos/hilos
- Uso por un sistema de archivos
En el caso de esta pregunta, el OP no puede dar cuenta de toda la memoria utilizada por procesos/hilos. Por lo tanto, es muy probable que el núcleo utilice la memoria restante para operaciones del sistema de archivos.
Causas probables
Actualmente conozco 3 razones principales para el uso excesivo de memoria del sistema de archivos:
- Caché ZFS ARC (o caché de sistema de archivos similar, que se registra como uso de memoria "normal")
- Discos RAM (
tmpfs
y sistemas de archivos similares) - Compresión nativa del sistema de archivos, combinada con E/S excesiva de disco (de modo que la compresión/recompresión se produce con un consumo constante de memoria como resultado)
Para solucionar estos 3 escenarios, recomendaría lo siguiente:
1. Caché ZFS ARC
Ejecute este comando para obtener información detallada sobre la caché ZFS ARC:
arcstat -a
La estadística reportada por size
aparecerá como memoria usada normal.
Por su publicación, es obvio que aquí se usan 0,5 GB.
2. Discos RAM
Ejecute este comando para obtener información sobre tmpfs
los discos ram del sistema de archivos actual:
df -hl -t"tmpfs"
Cualquier cantidad reportada por used
aparecerá como memoria usada normal.
Ubuntu (y muchas otras variantes de Linux) tienen un disco ram predeterminado en /dev/shm
. Las aplicaciones pueden utilizar este espacio, por lo que puedes consultarlo fácilmente con:
ls -ahl /dev/shm
Además, tmpfs
el uso también se muestra a continuación shared
en el free
resultado, por lo que, según su publicación, es obvio que aquí se usan 1,8 GB.
3. Compresión FS
Verifique la E/S del disco con este comando: ( iostat
es parte del sysstat
paquete)
iostat
Combine esto con conocimientos sobre la compresión del sistema de archivos habilitado para los discos relevantes. Para ZFS, ejecute este comando para obtener propiedades de compresión para todos los Zpools y conjuntos de datos:
zfs get compression
Si tiene una E/S alta en el disco, combinada con la compresión nativa habilitada, esto puede dar como resultado un exceso de memoria reportado como memoria usada normal.
Respuesta2
¿Está utilizando compresión en su sistema de archivos o un sistema de archivos de copia en escritura como BTRFS o ZFS?
Es posible que el uso excesivo de memoria se deba a que el kernel intenta (re)comprimir archivos en tiempo real o copiar/versionar cada escritura cuando los archivos grandes cambian con frecuencia.
La presión de la memoria se vuelve especialmente notable si tiene archivos grandes, como imágenes para máquinas virtuales, donde los archivos cambian con frecuencia y tienen un tamaño de gigabytes en lugar de megabytes.
Puede considerar deshabilitar la compresión en un sistema de archivos/subvolumen/nivel de volumen o nivel de archivo individual y/o deshabilitar COW (copiar al escribir)
BTRFS:
Se admite la eliminación de la compresión para archivos particulares con el comando btrfs:
property set <file> compression none
para eliminar COW (copiar al escribir) para una carpeta en particular:
chattr -R +C /directory/of/your/vm_images/
ZFS:
No creo que puedas eliminar la compresión de archivos individuales. Deshabilitar la compresión en un volumen solo afectará las escrituras futuras, por lo que deberá copiar cada archivo individualmente para que los archivos tengan la compresión deshabilitada.
zfs set compression=off name_of_zfs_vol