Невозможно использовать всю память

Невозможно использовать всю память

У меня часто происходит сбой приложения из-за ошибки распределения памяти (сообщение от dmesg), даже во время обычного просмотра с несколькими открытыми вкладками или обработки изображений с помощью gimp. На машине 16 ГБ оперативной памяти. Я попытался проверить распределение памяти следующим образомэтот вопрос:

$ 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

Обратите внимание, что сообщение "нет доступной памяти" не возвращается, если я использую 0,55 вместо 0,9 в строке awk, но каждое значение больше 0,55 приводит к ошибке. Почему я не могу выделить более 0,55 доступной памяти?

Это содержимое /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

и вот мои настройки overcommit:

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

решение1

Вы используетестрогий учет сверхобязательств, поэтому процессам не разрешено отображать больше, чем доступно памяти. Линия Committed_ASпоказывает, что в настоящее время выделено 9543584 КБ, а CommitLimitлиния показывает, что предел составляет 16760020 КБ, что оставляет 7216436 КБ, которые могут быть выделены; это 59,6% вашей доступной памяти, поэтому, принимая во внимание некоторые накладные расходы для stress-ng, неудивительно, что вы не можете выделить более 55% вашей доступной памяти для vm worker.

Если вы хотите разрешить stress-ngвыделение большего объема доступной памяти, вам необходимо разрешить превышение лимита:

sudo sysctl vm.overcommit_memory=0

или увеличьте сумму обмена, чтобы повысить лимит фиксации.

Связанный контент