使用 buildah 构建图像时,我收到:EMFILE:打开的文件过多

使用 buildah 构建图像时,我收到:EMFILE:打开的文件过多

当我运行时buildah bud,我收到以下错误。

npm ERR! code EMFILE
npm ERR! syscall open
npm ERR! path /root/.npm/_cacache/index-v5/cd/a5/aca06eccd914d83e3be09412f45e00ceac1150a83df0e32d015284f4c8f6
npm ERR! errno -24
npm ERR! EMFILE: too many open files, open '/root/.npm/_cacache/index-v5/cd/a5/aca06eccd914d83e3be09412f45e00ceac1150a83df0e32d015284f4c8f6'

我该如何解决这个问题?

答案1

这个问题可以用以下方法解决这个方法使用--ulimit

buildah bud --ulimit nofile=4096:4096

的解释--ulimit nofile=4096:4096

该选项记录在buildah build,

--ulimit type=soft-limit[:hard-limit]

指定应用于处理 RUN 指令时启动的进程的资源限制。该选项可以指定多次。公认的资源类型包括:

  • “core”:最大核心转储大小 ( ulimit -c)
  • “cpu”:最大 CPU 时间 ( ulimit -t)
  • “data”:进程数据段的最大大小 ( ulimit -d)
  • “fsize”:新文件的最大大小 ( ulimit -f)
  • "locks": 文件锁的最大数量 ( ulimit -x)
  • “memlock”:锁定内存的最大量 ( ulimit -l)
  • “msgqueue”:消息队列中的最大数据量(ulimit -q
  • “nice”:友好度调整(nice -n,ulimit -e)
  • “nofile”:最大打开文件数 ( ulimit -n)
  • “nofile”:打开文件的最大数量(1048576);
  • 当由 root“nproc”运行时:最大进程数 ( ulimit -u)
  • “nproc”:最大进程数(1048576);
  • 当由 root“rss”运行时:进程 ( ulimit -m)的最大大小
  • “rtprio”:最大实时调度优先级(ulimit -r
  • “rttime”:阻塞系统调用之间的最大实时执行量
  • “sigpending”:挂起信号的最大数量 ( ulimit -i) “stack”:最大堆栈大小 ( ulimit -s)

什么是软限制和硬限制,这些记录在man limits.conf

  • hard用于执行硬资源限制。这些限制由超级用户设置并由内核强制执行。用户不能将其对系统资源的要求提高到高于这些值。
  • soft用于实施软资源限制。这些限制是用户可以在任何预先存在的硬限制允许的范围内向上或向下移动的限制。对于正常的系统使用,可以将使用此标记指定的值视为默认值。

;tldr:设置内核对您可以打开的文件数量施加的硬限制和软限制。

相关内容