限制 RHEL8 可用的 RAM

The*_*aul 12 memory-usage rhel8

我们需要在具有 32Gb RAM 的服务器上运行一些测试。

我们可以访问的所有服务器都有 64GB,我们无法对其进行物理更改。

是否有某种方法告诉 RHEL 仅使用固定数量的 RAM,小于安装的 RAM?

vid*_*rlo 29

使用内核参数mem=32G启动:

mem=nn[KMG] [KNL,BOOT] 强制使用特定数量的内存

当内核无法看到整个系统内存或进行测试时要使用的内存量。[X86] 作为限制最大地址。与 memmap= 一起使用以避免物理地址空间冲突。如果没有 memmap= PCI 设备可以放置在属于未使用的 RAM 的地址处。


小智 5

是的,您可以在物理 RAM 多于您需要的服务器上分配固定数量的 RAM 用于测试目的。为此,您可以使用 Red Hat Enterprise Linux (RHEL) 中的控制组 (cgroup) 来限制特定进程或进程组可以使用的内存量。

以下是有关如何限制特定进程或进程组的 RAM 使用量的分步指南:

  1. 安装并启用cgroup-tools

    如果您还没有安装该软件包,您可能需要安装该cgroup-tools软件包:

    sudo yum install libcgroup-tools
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建内存Cgroup:

    为您的测试进程创建一个新的 cgroup:

    sudo cgcreate -g memory:/mytestgroup
    
    Run Code Online (Sandbox Code Playgroud)

    替换/mytestgroup为所需的 cgroup 名称。

  3. 限制内存使用:

    设置 cgroup 的内存限制。例如,将 RAM 限制为 16GB:

    sudo cgset -r memory.limit_in_bytes=16G mytestgroup
    
    Run Code Online (Sandbox Code Playgroud)

    调整您想要为测试分配的 RAM 量的限制。

  4. 将您的进程移至 Cgroup:

    您需要将要限制的进程移至 cgroup。您可以通过指定进程的 cgroup 或使用cgexec命令来完成此操作。例如,要在 cgroup 中运行命令mytestgroup

    sudo cgexec -g memory:mytestgroup your_test_command
    
    Run Code Online (Sandbox Code Playgroud)

    替换your_test_command为您想要作为测试一部分运行的实际命令。

  5. 监控内存使用情况:

    您可以使用以下命令监控 cgroup 及其进程的内存使用情况cgget

    sudo cgget -g memory:mytestgroup
    
    Run Code Online (Sandbox Code Playgroud)

    这将显示有关内存使用情况的信息,包括内存限制和当前使用情况。

  6. 清理:

    测试完成后,您可以删除 cgroup:

    sudo cgdelete memory:mytestgroup
    
    Run Code Online (Sandbox Code Playgroud)

    这将删除 cgroup 并释放内存限制。

通过执行这些步骤,您可以有效地限制特定进程或进程组在物理 RAM 多于测试目的所需的服务器上可以使用的 RAM 量。这使您可以隔离和控制分配给测试进程的资源,而无需物理更改服务器的硬件配置。