# 限制容器内文件句柄数<a name="ZH-CN_TOPIC_0184808083"></a>

## 描述<a name="zh-cn_topic_0183293572_section13350115135310"></a>

可以通过参数限制容器中可以打开的文件句柄数。

## 用法<a name="zh-cn_topic_0183293572_section188811239165314"></a>

lcrc create/run时使用--files-limit来限制容器中可以打开的文件句柄数。

## 参数<a name="zh-cn_topic_0183293572_section204328722112"></a>

create/run时指定--files-limit参数。

<a name="zh-cn_topic_0183293572_teea6792d7cdc4de6bbec22c6d34a8a56"></a>
<table><thead align="left"><tr id="zh-cn_topic_0183293572_r461aacfe00054dd09da79ded3d0d5677"><th class="cellrowborder" valign="top" width="25%" id="mcps1.1.5.1.1"><p id="zh-cn_topic_0183293572_a4713c2757b4742f1bcfc60cf8f92362b"><a name="zh-cn_topic_0183293572_a4713c2757b4742f1bcfc60cf8f92362b"></a><a name="zh-cn_topic_0183293572_a4713c2757b4742f1bcfc60cf8f92362b"></a><strong id="zh-cn_topic_0183293572_zh-cn_topic_0075721648_b576494217460"><a name="zh-cn_topic_0183293572_zh-cn_topic_0075721648_b576494217460"></a><a name="zh-cn_topic_0183293572_zh-cn_topic_0075721648_b576494217460"></a>参数项</strong></p>
</th>
<th class="cellrowborder" valign="top" width="25%" id="mcps1.1.5.1.2"><p id="zh-cn_topic_0183293572_zh-cn_topic_0075721648_p349275174212"><a name="zh-cn_topic_0183293572_zh-cn_topic_0075721648_p349275174212"></a><a name="zh-cn_topic_0183293572_zh-cn_topic_0075721648_p349275174212"></a><strong id="zh-cn_topic_0183293572_ac040c826773e4b99805cc38e76ea34ab"><a name="zh-cn_topic_0183293572_ac040c826773e4b99805cc38e76ea34ab"></a><a name="zh-cn_topic_0183293572_ac040c826773e4b99805cc38e76ea34ab"></a>参数说明</strong></p>
</th>
<th class="cellrowborder" valign="top" width="25%" id="mcps1.1.5.1.3"><p id="zh-cn_topic_0183293572_a4d0aaa96c3b242aca9d2c22e494195f2"><a name="zh-cn_topic_0183293572_a4d0aaa96c3b242aca9d2c22e494195f2"></a><a name="zh-cn_topic_0183293572_a4d0aaa96c3b242aca9d2c22e494195f2"></a><strong id="zh-cn_topic_0183293572_a6ca93c7f0c2c44ada8766aa5e9591252"><a name="zh-cn_topic_0183293572_a6ca93c7f0c2c44ada8766aa5e9591252"></a><a name="zh-cn_topic_0183293572_a6ca93c7f0c2c44ada8766aa5e9591252"></a>取值范围</strong></p>
</th>
<th class="cellrowborder" valign="top" width="25%" id="mcps1.1.5.1.4"><p id="zh-cn_topic_0183293572_a4cfdf0a8726d4fd08a52bb078988fc90"><a name="zh-cn_topic_0183293572_a4cfdf0a8726d4fd08a52bb078988fc90"></a><a name="zh-cn_topic_0183293572_a4cfdf0a8726d4fd08a52bb078988fc90"></a><strong id="zh-cn_topic_0183293572_zh-cn_topic_0075721648_b560748317460"><a name="zh-cn_topic_0183293572_zh-cn_topic_0075721648_b560748317460"></a><a name="zh-cn_topic_0183293572_zh-cn_topic_0075721648_b560748317460"></a>是否必选</strong></p>
</th>
</tr>
</thead>
<tbody><tr id="zh-cn_topic_0183293572_r771d05a684c4482b930111a484d0e970"><td class="cellrowborder" valign="top" width="25%" headers="mcps1.1.5.1.1 "><p id="zh-cn_topic_0183293572_a668c80e436084fa48ad0a3aa56d627b9"><a name="zh-cn_topic_0183293572_a668c80e436084fa48ad0a3aa56d627b9"></a><a name="zh-cn_topic_0183293572_a668c80e436084fa48ad0a3aa56d627b9"></a>--files-limit</p>
</td>
<td class="cellrowborder" valign="top" width="25%" headers="mcps1.1.5.1.2 "><p id="zh-cn_topic_0183293572_ac71045ed552b48d6bcb54a96bc27f690"><a name="zh-cn_topic_0183293572_ac71045ed552b48d6bcb54a96bc27f690"></a><a name="zh-cn_topic_0183293572_ac71045ed552b48d6bcb54a96bc27f690"></a>限制容器中可以打开的文件句柄数。</p>
</td>
<td class="cellrowborder" valign="top" width="25%" headers="mcps1.1.5.1.3 "><p id="zh-cn_topic_0183293572_aabdc1cfa9ac94f6dafcab0ff0400c2e7"><a name="zh-cn_topic_0183293572_aabdc1cfa9ac94f6dafcab0ff0400c2e7"></a><a name="zh-cn_topic_0183293572_aabdc1cfa9ac94f6dafcab0ff0400c2e7"></a>64位整数(int64)。可以为0、负，但不能超过2的63 次方减 1，0、负表示不做限制（max）。</p>
<p id="zh-cn_topic_0183293572_a4e618a1fe09a48509e48acbb4da0635f"><a name="zh-cn_topic_0183293572_a4e618a1fe09a48509e48acbb4da0635f"></a><a name="zh-cn_topic_0183293572_a4e618a1fe09a48509e48acbb4da0635f"></a>由于创建容器的过程中会临时打开一些句柄，所以此值不能设置的太小，不然容器可能不受files limit的限制（如果设置的数小于当前已经打开的句柄数，会导致cgroup文件写不进去），建议大于30。</p>
</td>
<td class="cellrowborder" valign="top" width="25%" headers="mcps1.1.5.1.4 "><p id="zh-cn_topic_0183293572_a0d045bd4e7814cfc9808521c9e3c1b5b"><a name="zh-cn_topic_0183293572_a0d045bd4e7814cfc9808521c9e3c1b5b"></a><a name="zh-cn_topic_0183293572_a0d045bd4e7814cfc9808521c9e3c1b5b"></a>否</p>
</td>
</tr>
</tbody>
</table>

## 示例<a name="zh-cn_topic_0183293572_section1734193235916"></a>

在运行容器时，直接加上--files-limit n 即可，如：

```
lcrc run -ti --files-limit 1024 busybox bash
```

## 约束<a name="zh-cn_topic_0183293572_section346363019141"></a>

1.  使用--files-limit参数传入一个很小的值，如1，可能导致容器启动失败。

    ```
    [root@localhost ~]# lcrc run -itd --files-limit 1 rnd-dockerhub.huawei.com/official/busybox-aarch64
    004858d9f9ef429b624f3d20f8ba12acfbc8a15bb121c4036de4e5745932eff4
    Error response from daemon: Start container error: Container is not running:004858d9f9ef429b624f3d20f8ba12acfbc8a15bb121c4036de4e5745932eff4
    ```

    而docker会启动成功，其files.limit cgroup值为max。

    ```
    [root@localhost ~]# docker run -itd --files-limit 1 rnd-dockerhub.huawei.com/official/busybox-aarch64
    ef9694bf4d8e803a1c7de5c17f5d829db409e41a530a245edc2e5367708dbbab
    [root@localhost ~]# docker exec -it ef96 cat /sys/fs/cgroup/files/files.limit
    max
    ```

    根因是lxc和runc启动过程的原理不一样，lxc创建cgroup子组后先设置files.limit值，再将容器进程的PID写入该子组的cgroup.procs文件，此时该进程已经打开超过1个句柄，因而写入报错导致启动失败。runc创建cgroup子组后先将容器进程的PID写入该子组的cgroup.procs文件，再设置files.limit值，此时由于该子组内的进程已经打开超过1个句柄，因而写入files.limit不会生效，内核也不会报错，容器启动成功。


