You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器编译AOSP时‘too many open files’错误求助

解决Docker容器编译AOSP时too many open files错误的方案
  • 检查Docker守护进程全局文件描述符限制
    即使容器内设置了--ulimit,Docker守护进程本身的限制可能会成为瓶颈。修改守护进程配置:

    1. 编辑/etc/docker/daemon.json,添加全局ulimit配置:
      {
        "default-ulimits": {
          "nofile": {
            "Name": "nofile",
            "Hard": 1048576,
            "Soft": 1048576
          }
        }
      }
      
    2. 重启Docker服务:
      sudo systemctl restart docker
      
    3. 重新创建容器,此时容器的文件描述符限制会继承全局配置并生效。
  • 调整主机系统的全局文件描述符限制
    主机的系统级限制会约束所有进程(包括Docker):

    1. 临时生效命令:
      sudo sysctl -w fs.file-max=1048576
      sudo ulimit -n 1048576
      
    2. 永久生效配置:
      • 编辑/etc/sysctl.conf,添加:fs.file-max=1048576
      • 编辑/etc/security/limits.conf,添加:
        * soft nofile 1048576
        * hard nofile 1048576
        root soft nofile 1048576
        root hard nofile 1048576
        
      • 重启系统或重新登录使配置生效。
  • 降低AOSP编译的并行任务数
    过多的并行编译进程会同时打开大量文件,超出限制。手动指定合理的并行数:

    make -j$(nproc --ignore=8)
    

    预留8个核心避免进程过载,可根据实际情况调整--ignore的数值。

  • 检查绑定挂载分区的文件系统参数
    绑定的ext4分区可能存在自身的文件描述符限制:

    1. 查看当前挂载参数:
      mount | grep /my/host/workspace
      
    2. 临时调整挂载参数:
      sudo mount -o remount,nr_open=1048576,max_file=2097152 /my/host/workspace
      
    3. 永久生效需编辑/etc/fstab,在对应分区的挂载选项中添加nr_open=1048576,max_file=2097152。
  • 验证容器内的实际限制
    进入容器后执行以下命令确认限制是否生效:

    ulimit -Hn  # 查看硬限制
    ulimit -Sn  # 查看软限制
    sysctl fs.file-max
    

    若数值仍不符合预期,需检查是否有SELinux/AppArmor等安全模块限制了资源配置,或Docker Desktop的资源分配是否正确应用。

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:11:35