我们需要在具有 32Gb RAM 的服务器上运行一些测试。
我们可以访问的所有服务器都有 64GB,我们无法物理地改变这一点。
是否有某种方法可以告诉 RHEL 仅使用固定数量的 RAM(少于安装的数量)?
答案1
使用核参数mem=32G
:
mem=nn[KMG]
[KNL,BOOT]强制使用特定数量的内存当内核无法看到整个系统内存或用于测试时要使用的内存量。[X86] 用作限制最大地址。与 memmap= 一起使用可避免物理地址空间冲突。如果没有 memmap=,PCI 设备可能会被放置在未使用的 RAM 的地址上。
答案2
是的,您可以在物理 RAM 超过所需数量的服务器上分配固定数量的 RAM 用于测试目的。为此,您可以使用 Red Hat Enterprise Linux (RHEL) 中的控制组 (cgroups) 来限制特定进程或进程组可以使用的内存量。
以下是有关如何限制特定进程或进程组的 RAM 使用量的分步指南:
安装并启用
cgroup-tools
:如果还没有,你可能需要安装该
cgroup-tools
包:sudo yum install libcgroup-tools
创建内存 Cgroup:
为您的测试流程创建一个新的 cgroup:
sudo cgcreate -g memory:/mytestgroup
替换
/mytestgroup
为所需的 cgroup 名称。限制内存使用量:
设置 cgroup 的内存限制。例如,将其限制为 16GB RAM:
sudo cgset -r memory.limit_in_bytes=16G mytestgroup
将限制调整为您要为测试分配的 RAM 数量。
将您的流程移至 Cgroup:
您需要将要限制的进程移至 cgroup。您可以通过为进程指定 cgroup 或使用命令来执行此操作
cgexec
。例如,要在mytestgroup
cgroup 中运行命令:sudo cgexec -g memory:mytestgroup your_test_command
将其替换
your_test_command
为您要在测试中运行的实际命令。监视内存使用情况:
您可以使用以下命令监视 cgroup 及其进程的内存使用情况
cgget
:sudo cgget -g memory:mytestgroup
这将显示有关内存使用情况的信息,包括内存限制和当前使用情况。
清理:
当测试完成后,你可以删除 cgroup:
sudo cgdelete memory:mytestgroup
这将删除 cgroup 并释放内存限制。
通过执行这些步骤,您可以有效地限制特定进程或进程组在物理 RAM 超过测试所需数量的服务器上可以使用的 RAM 量。这样您就可以隔离和控制分配给测试进程的资源,而无需物理更改服务器的硬件配置。