No se puede usar toda la memoria

No se puede usar toda la memoria

Con frecuencia la aplicación falla debido a un error de asignación de memoria (informado por dmesg), incluso durante la navegación normal con pocas pestañas abiertas o durante el procesamiento de imágenes con Gimp. La máquina tiene 16 GB de RAM. Intenté probar la asignación de memoria siguienteesta pregunta:

$ stress-ng --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1
stress-ng: info: [28129] defaulting to a 86400 second (1 day, 0.00 secs) run per stressor 
stress-ng: info: [28129] dispatching hogs: 1 vm
stress-ng: error: [28148] stress-ng-vm: gave up trying to mmap, no available memory
stress-ng: info: [28129] successful run completed in 10.02s

Tenga en cuenta que el mensaje "no hay memoria disponible" no aparece si uso 0,55 en lugar de 0,9 en la línea awk, pero cada valor mayor que 0,55 da el error. ¿Por qué no puedo asignar más de 0,55 de memoria disponible?

Este es el contenido de /proc/meminfo

MemTotal:       15919800 kB
MemFree:         5488312 kB
MemAvailable:   12100632 kB
Buffers:          716568 kB
Cached:          6156352 kB
SwapCached:            0 kB
Active:          5465468 kB
Inactive:        4214576 kB
Active(anon):    2985580 kB
Inactive(anon):   117944 kB
Active(file):    2479888 kB
Inactive(file):  4096632 kB
Unevictable:      176576 kB
Mlocked:            2476 kB
SwapTotal:        999420 kB
SwapFree:         999420 kB
Dirty:               156 kB
Writeback:             0 kB
AnonPages:       2983852 kB
Mapped:           713212 kB
Shmem:            294288 kB
KReclaimable:     380216 kB
Slab:             448228 kB
SReclaimable:     380216 kB
SUnreclaim:        68012 kB
KernelStack:       14432 kB
PageTables:        55080 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    16760020 kB
Committed_AS:    9543584 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       31412 kB
VmallocChunk:          0 kB
Percpu:             2848 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
FileHugePages:         0 kB
FilePmdMapped:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      274432 kB
DirectMap2M:     9728000 kB
DirectMap1G:     6291456 kB

y estas son mis configuraciones de sobrecompromiso:

$ cat /proc/sys/vm/overcommit_memory
2
$ cat /proc/sys/vm/overcommit_ratio
99
$ cat /proc/sys/vm/swappiness
10

Respuesta1

estas usandoestricta contabilidad de exceso de compromiso, por lo que los procesos no pueden asignar más memoria que la disponible. La Committed_ASlínea muestra que actualmente hay asignados 9543584 kiB y la CommitLimitlínea muestra que el límite es 16760020 kiB, lo que deja 7216436 kiB que se pueden asignar; eso es el 59,6 % de la memoria disponible, por lo que, teniendo en cuenta algunos gastos generales de stress-ng, no sorprende que no pueda asignar más del 55 % de la memoria disponible al trabajador de la máquina virtual.

Si desea permitir stress-ngla asignación de más memoria disponible, debe permitir la sobrecompromiso:

sudo sysctl vm.overcommit_memory=0

o aumente la cantidad de swap para aumentar su límite de compromiso.

información relacionada