首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能使用所有内存

不能使用所有内存
EN

Unix & Linux用户
提问于 2020-04-16 13:55:38
回答 1查看 449关注 0票数 0

我经常因为内存分配错误(由dmesg报告)而导致应用程序崩溃,甚至在正常浏览时,很少打开选项卡,或者使用gimp进行图像处理。这台机器有16 of的公羊。我尝试在这个问题之后测试内存分配:

代码语言:javascript
复制
$ 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.55而不是0.9,则不会返回“无可用内存”消息,但每个大于0.55的值都会产生错误。为什么我不能分配更多的0.55可用内存?

这是/proc/meminfo的内容

代码语言:javascript
复制
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

这些是我超额承诺的设置:

代码语言:javascript
复制
$ cat /proc/sys/vm/overcommit_memory
2
$ cat /proc/sys/vm/overcommit_ratio
99
$ cat /proc/sys/vm/swappiness
10
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-04-16 14:13:21

您使用的是严格的超额承付会计,因此进程不能映射比可用内存更多的内存。Committed_AS行显示当前分配了9543584 kiB,CommitLimit行显示限制为16760020 kiB,留下了可分配的7216436 kiB;这是可用内存的59.6%,因此考虑到stress-ng的一些开销,您不能将55%的可用内存分配给vm工作人员也就不足为奇了。

如果希望允许stress-ng分配更多可用内存,则需要允许超额提交:

代码语言:javascript
复制
sudo sysctl vm.overcommit_memory=0

或者增加交换数量以提高提交限制。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/580464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档