모든 메모리를 사용할 수 없습니다

모든 메모리를 사용할 수 없습니다

열린 탭이 거의 없는 일반적인 탐색이나 gimp를 사용한 이미지 처리 중에도 메모리 할당 오류(dmesg에서 보고됨)로 인해 앱이 자주 충돌합니다. 이 기기에는 16GB의 RAM이 있습니다. 다음과 같은 메모리 할당을 테스트하려고 합니다.이 문제:

$ 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

awk 행에서 0.9 대신 0.55를 사용하면 "사용 가능한 메모리 없음" 메시지가 반환되지 않지만 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

제가 너무 많이 사용하는 설정은 다음과 같습니다.

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

답변1

당신은 사용하고 있습니다엄격한 초과 사용량 회계, 따라서 프로세스가 사용 가능한 것보다 더 많은 메모리를 매핑하는 것을 허용하지 않습니다. 이 Committed_AS줄은 9543584kiB가 현재 할당되었음을 보여주고, 이 CommitLimit줄은 제한이 16760020kiB이며 할당할 수 있는 공간은 7216436kiB임을 보여줍니다. 이는 사용 가능한 메모리의 59.6%이므로 일부 오버헤드가 주어지면 stress-ng사용 가능한 메모리의 55% 이상을 할당할 수 없습니다. 메모리 가상 머신에 작업자 스레드를 제공하는 것은 놀라운 일이 아닙니다.

사용 가능한 메모리를 더 많이 할당 하려면 stress-ng오버커밋을 허용해야 합니다.

sudo sysctl vm.overcommit_memory=0

또는 교환 금액을 늘려 약정 한도를 높이세요.

관련 정보