在 Linux 中设置可用的物理内存总量限制

20

我知道应该设置mem = 内存限制。但是我不知道在运行时还是在引导时去哪里以便限制操作系统控制的总物理内存。

我正在运行I/O基准测试,并希望限制可用的总物理内存量。

5个回答

25
我找到了我正在寻找的答案。基本上,设置总可用物理内存的参数是“mem=MEMORY_LIMIT”。 这是一个内核启动参数。您需要向内核引导参数添加"mem=1G",以获取最多1GB可用物理内存。有关如何添加内核引导参数的更多信息,请参阅https://wiki.ubuntu.com/Kernel/KernelBootParameters

1
该参数在x86系统(32位和64位)中有稍微不同的含义:“mem = nn [KMG] […] [X86]作为限制最大地址”(来源)。由于保留的内存部分,它在x86上的值将高于要提供给操作系统的内存量。例如:必须使用mem = 6700M才能获得5365 MiB(6 GiB)物理可用内存中的6144 MiB的内存。 - tanius

6
lilo.confgrub.confgrub.cfgmenu.lst中修改你的内核引导参数(这取决于你使用的发行版和引导加载程序,请查阅你的发行版文档以获得更多详细信息),在指定内核参数的那一行中加入mem=512M(或任何你想要模拟的大小)。例如,在Grub中,应该有一行类似于kernel /boot/vmlinuz param1=val1 param2=val2的内容。将mem=512M添加到这些参数中。你可以通过复制这些完整的定义并将其重命名来为你的启动菜单创建单独的条目,并配置每个条目使用不同数量的内存,这样你就可以快速使用不同的设置启动。

3
为补充Brian Campbell的列表,在BeagleBone / Black设备上的uBoot引导加载程序中,编辑/boot/uboot/uEnv.txt内核参数。
添加或修改行mmcargs=setenv bootargs mem=512M [在Debian下经过测试]
使用> free在[重新启动]之前和之后确认修改。

2
我将遵循KZcoding提到的此页面中的指示(部分:永久添加内核引导参数)。
我的Linux是(在VirtualBox中的虚拟机):
Linux ubuntu 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

设置之前:

yavuz@ubuntu:~$ free -m
          total        used        free      shared  buff/cache   available
Mem:           3630         305        3010           6         314        3264
Swap:          3767           0        3767

刚刚在/etc/default/grub文件中更改了这一行。

GRUB_CMDLINE_LINUX_DEFAULT=""

GRUB_CMDLINE_LINUX_DEFAULT="mem=2G"

然后重新启动服务器。重新启动后:
yavuz@ubuntu:~$ free -m
              total        used        free      shared  buff/cache   available
Mem:           2000         298        1385           4         315        1651
Swap:          3767           0        3767

我想我们需要重新启动才能看到可用内存的变化吧? - Stephane
在我的 Ubuntu 16.04 上,即使重启后,可用内存仍然没有改变。 - Stephane
@Stephane,在编辑了/etc/default/grup文件后,你是否运行了sudo update-grub命令? - Yang
@Yang 我很久以前就解决了我的问题,通过将内存条切换回原始内存条。 - Stephane
谢谢@Stephane,我已经编辑了答案并添加了我们必须重新启动服务器的内容。 - Yavuz Sert
显示剩余2条评论

0

A1: 是的,你必须重新启动。

A2: 内核对于打字错误非常严格。没有错误消息。这可能是你的问题吗?例如:" mem=512M" 和 " mem=2G"。不要忘记在前一个参数后面加上空格,mem应该是小写,而K、M或G应该是大写。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接