我们有一台 4-CPU/72 核、4TB 内存的机器,运行 Redhat 7.6。
/proc/cmdline
显示:
BOOT_IMAGE=/vmlinuz-3.10.0-957.5.1.el7.x86_64 ... ro crashkernel=auto rd.lvm.lv=vg00/lswap nomodeset rhgb quiet LANG=en_US.UTF-8
运行作业时,我们无法在这台机器上分配超过 1TB 的内存。我已经能够通过使用分配内存来重现这一点stress-ng
。例如现在的状态是:
total used free shared buff/cache available
Mem: 3.9T 279G 2.2T 34G 1.4T 3.6T
Swap: 127G 849M 127G
当我尝试使用stress-ng 分配内存以使用超过 1TB 的内存时,我遇到了失败。这个命令工作正常:
stress-ng -m 60 --vm-bytes 700G -t 180s
我看到内存最大约为 980GB。但如果我分配更多一点,就会出现 mmap 失败。
stress-ng -m 60 --vm-bytes 800G -t 180s
stress-ng: info: [90100] dispatching hogs: 60 vm
stress-ng: error: [90457] stress-ng-vm: gave up trying to mmap, no available memory
并且free
显示使用量最高达到 1TB。我们的使用量从未超过 1TB。
是否有内核配置或其他我们应该考虑的因素可能将用户内存限制为 1.0TB?随着时间的推移,该buff/cache
值增长到 3.0T 并且永远不会被释放,大概是因为内核不允许用户进程浸入该井中。