# 限制内存资源<a name="ZH-CN_TOPIC_0184808177"></a>

1.  配置轻量级虚拟机MEM运行资源

    对轻量级虚拟机的MEM资源配置即虚拟机运行的内存进行配置，安全容器使用--annotation com.github.containers.virtcontainers.sandbox\_mem配置轻量级虚拟机运行MEM资源，该参数仅可配置在pause容器上：

    ```
    docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.sandbox_mem=<memory-size> <pause-image> <command>
    ```

    举例：

    ```
    # 启动一个pause容器，通过--annotation com.github.containers.virtcontainers.sandbox_mem=4G为轻量级虚机分配4G内存
    docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.sandbox_mem=4G ubuntu-arm64 bash
    1532c3e59e7a45cd6b419aa1db07dd0069b0cdd93097f8944177a25e457e4297
    
    # 查看轻量级虚机中内存信息，查看内存大小是否与com.github.containers.virtcontainers.sandbox_mem配置的内存大小相等
    docker exec 1532c3e free -m
                  total        used        free      shared  buff/cache   available
    Mem:           3950          20        3874          41          55        3858
    Swap:             0           0           0
    ```

    >![](public_sys-resources/icon-note.gif) **说明：**   
    >-   如果没有通过--annotation com.github.containers.virtcontainers.sandbox\_mem显示地设置轻量级虚机的内存大小，则轻量级虚机默认使用的内存大小为1GB。  
    >-   安全容器一个Pod的最小内存规格是1GB，支持的最大内存规格是256GB。如果用户分配的内存规格超过256GB，可能会出现未定义的错误，安全容器暂不支持超过256GB的大内存场景。  

2.  配置容器MEM运行资源

    配置容器MEM运行资源与开源docker容器配置MEM运行资源的方式相同，可以通过docker run命令中MEM资源限制相关的参数进行配置：

    <a name="zh-cn_topic_0182219834_table11321051171213"></a>
    <table><thead align="left"><tr id="zh-cn_topic_0182219834_row5321251121219"><th class="cellrowborder" valign="top" width="50%" id="mcps1.1.3.1.1"><p id="zh-cn_topic_0182219834_p1208737146"><a name="zh-cn_topic_0182219834_p1208737146"></a><a name="zh-cn_topic_0182219834_p1208737146"></a><strong id="zh-cn_topic_0182219834_b1243812519152"><a name="zh-cn_topic_0182219834_b1243812519152"></a><a name="zh-cn_topic_0182219834_b1243812519152"></a>参数</strong></p>
    </th>
    <th class="cellrowborder" valign="top" width="50%" id="mcps1.1.3.1.2"><p id="zh-cn_topic_0182219834_p1332145111210"><a name="zh-cn_topic_0182219834_p1332145111210"></a><a name="zh-cn_topic_0182219834_p1332145111210"></a><strong id="zh-cn_topic_0182219834_b12491112818158"><a name="zh-cn_topic_0182219834_b12491112818158"></a><a name="zh-cn_topic_0182219834_b12491112818158"></a>含义</strong></p>
    </th>
    </tr>
    </thead>
    <tbody><tr id="zh-cn_topic_0182219834_row1532175119122"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.1 "><p id="zh-cn_topic_0182219834_p15321251191214"><a name="zh-cn_topic_0182219834_p15321251191214"></a><a name="zh-cn_topic_0182219834_p15321251191214"></a>-m/--memory</p>
    </td>
    <td class="cellrowborder" valign="top" width="50%" headers="mcps1.1.3.1.2 "><p id="zh-cn_topic_0182219834_p232951121217"><a name="zh-cn_topic_0182219834_p232951121217"></a><a name="zh-cn_topic_0182219834_p232951121217"></a>设置容器进程可以使用的内存大小。</p>
    <div class="note" id="zh-cn_topic_0182219834_note04024417164"><a name="zh-cn_topic_0182219834_note04024417164"></a><a name="zh-cn_topic_0182219834_note04024417164"></a><span class="notetitle"> 说明： </span><div class="notebody"><a name="zh-cn_topic_0182219834_ul16187123721710"></a><a name="zh-cn_topic_0182219834_ul16187123721710"></a><ul id="zh-cn_topic_0182219834_ul16187123721710"><li>当内存热插拔开关关闭时，-m的取值要小于等于轻量级虚机启动时分配的内存大小。</li></ul>
    </div></div>
    </td>
    </tr>
    </tbody>
    </table>

3.  配置MEM热插功能

    同配置CPU热插拔功能一样，MEM的热插功能也是由kata-runtime配置文件config.toml中**enable\_cpu\_memory\_hotplug**选项配置，用法参见[3](限制CPU资源.md#zh-cn_topic_0183903699_li2167326144011)。

    >![](public_sys-resources/icon-note.gif) **说明：**   
    >内存资源当前只支持热插，不支持内存热拔。  

    kata-runtime中复用了**-m**选项实现了MEM热插的功能，通过统计Pod中所有容器的**-m**选项的和，然后确定需要热插多少内存到轻量级虚机中，例如，

    举例：

    ```
    # 启动一个pause容器，轻量级虚机默认分配了1GB内存
    docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox ubuntu bash
    99b78508ada3fa7dcbac457bb0f6e3784e64e7f7131809344c5496957931119f
    
    # 查看启动完pause容器后轻量级虚机中的内存大小
    docker exec 99b78508ada free -m
                  total        used        free      shared  buff/cache   available
    Mem:            983          18         914          36          50         908
    Swap:             0           0           0
    
    # 在同一个Pod中启动新的容器并通过-m设置容器需要的内存大小为4G
    docker run -tid --runtime kata-runtime --network none -m 4G --annotation io.kubernetes.docker.type=container --annotation io.kubernetes.sandbox.id=99b78508ada3fa7dcbac457bb0f6e3784e64e7f7131809344c5496957931119f ubuntu bash
    c49461745a712b2ef3127fdf43b2cbb034b7614e6060b13db12b7a5ff3c830c8
    
    # 查看当前轻量级虚机中内存的大小
    docker exec c49461745 free -m
                  total        used        free      shared  buff/cache   available
    Mem:           4055          69        3928          36          57        3891
    Swap:             0           0           0
    
    # 删除热插了CPU的容器后，查看轻量级虚机中内存的大小
    docker rm -f c49461745
    c49461745
    
    # 因为热插的内存暂不支持热拔功能，所以轻量级虚机中在删除热插内存容器之后还是拥有4GB的内存
    docker exec 99b78508ada free -m
                  total        used        free      shared  buff/cache   available
    Mem:           4055          69        3934          36          52        3894
    Swap:             0           0           0
    ```

    >![](public_sys-resources/icon-note.gif) **说明：**   
    >由于pause容器只是一个占位容器没有工作负载，所以轻量级虚机启动时分配的内存可以被其它容器共享使用，因此上面例子中启动的新容器只需要再热插3GB的内存到轻量级虚机中即可。  


