【问题标题】:How to increase the file limit of GitHub Actions?如何增加 GitHub Actions 的文件限制?
【发布时间】:2020-04-18 16:48:35
【问题描述】:

我有以下错误:

Error: ENOSPC: System limit for number of file watchers reached, watch '/home/ runner/work...

我尝试了所有增加限制的方法(如 ulimit -S -n unlimited、sysctl 等),但似乎不起作用,sudo 也不行

截图

我的网站有很多 gatsby 用来构建最终 .html 的 markdown 文件(约 80k)。

在我的机器上,我当然需要增加文件限制,然后才能工作。但在 github 操作中,我想不出办法。

我的github操作workflow.yml

    name: Build

    on: [push, repository_dispatch]

    jobs:
    update:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v1

        - name: Increase file limit
            run: sudo sysctl -w fs.file-max=65536

        - name: Debug
            run: ulimit -a

        - name: Set Node.js
            uses: actions/setup-node@master
            with:
            node-version: 12.x

        - name: Install dependencies
            run: npm install

        - name: Build
            run: npm run build

我认为这可能与这个问题有关:https://github.com/gatsbyjs/gatsby/issues/17321

【问题讨论】:

  • 请勿发布代码、数据、错误消息等的图片 - 将文本复制或输入到问题中。 How to Ask

标签: node.js github continuous-integration gatsby github-actions


【解决方案1】:

听起来这些 GitHub/Expo 问题可能是问题所在:

https://github.com/expo/expo-github-action/issues/20

ENOSPC:已达到文件观察者数量的系统限制

https://github.com/expo/expo-cli/issues/277

处理 ENOSPC 错误(已达到 fs.inotify.max_user_watches)

感谢测试!

恐怕这似乎是一个 GitHub Action 局限性。该泊坞窗图像迫使 fs.inotify.max_user_watches 限制为 524288,但显然 GHA 是 将其覆盖回 8192。您可以看到这发生在 你的回购(当我们完成后,我会删除 fork ofc,如果 你想早点删除它)。

继续...

是的,这与您运行的环境的限制有关 Expo CLI in. Metro 捆绑器需要大量的听众 显然。如果主机环境对此进行限制,则会失败。所以 从技术上讲,它是一个环境问题,但我不确定 CLI 是否可以 对此进行任何更改。

我个人觉得 GitHub Action 的限制有点低。像我一样 试图在早先对该 CLI 问题的评论中概述, 其他 CI 供应商的限制实际上设置为默认最大值 听众。为什么他们没有在 GH Actions 中这样做尚不清楚,那就是 我试图找出什么。可能是他们的配置问题 手,或故意限制。

...还有...

所以,有一个修复程序,当我尝试时,它似乎对我有用。什么 我所做的是遵循这个家伙的提示:“增加 观察者” — @JNYBGR https://link.medium.com/9Zbt3B4pM0

然后我在我的主要 action.yml 中完成了所有细节 在开发版本下面

steps:
 - uses: actions/checkout@v1
 - name: Setup kernel for react native, increase watchers
      run: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
 - name: Run dev release fastlane inside docker action

请让我们知道这是否符合您的环境/场景,以及您是否找到了可行的解决方法。


更新:

OP 在他的 .yaml 中尝试了 fs.inotify.max_user_watches=524288,现在 Gatsby 以 Error: EMFILE: too many open files open '/home/runner/work/virtualizedfy.gatsby 失败,NodeJS 随后因断言错误而崩溃:

node[3007]: ../src/spawn_sync.cc:460:v8:Maybe<bool> node:SycProcessRunner::TryInitializeAndRunLoop(v8:Local<v8::Value>): Assertion `{uv_loop_init(vu_loop_ == (0)' failed.

其他建议:

https://github.com/gatsbyjs/gatsby/issues/12011

Google 似乎建议 https://github.com/isaacs/node-graceful-fs 作为 fs的替代品下降,我也可以尝试一下 如果它有所作为。

编辑:我可以确认在顶部使用优雅 fs 对 fs 进行monkeypatching 下面的 sn-p 中的 gatsby-node.js 为我解决了这个问题。

const realFs = require('fs')
const gracefulFs = require('graceful-fs')
gracefulFs.gracefulify(realFs)

EDIT2:实际上在从节点 10 升级到节点 11 之后,一切 无需修补 fs 似乎没问题...所以一切都很好!

【讨论】:

  • 不,听起来问题已经“转移”了。根据您的其他信息,也请尝试我上面的建议。
  • 我会尝试你的建议,仅供参考,我使用的是节点 12。谢谢!
  • 好的,我取得了一些进展。但现在它落在了:pastebin.com/raw/F8RfvvnC
  • 我正在并行使用谷歌云构建,似乎正在工作(仍在构建......)
猜你喜欢
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 2020-05-27
  • 2022-11-11
  • 2021-05-20
  • 2020-01-14
  • 2019-02-27
  • 2022-01-02
相关资源
最近更新 更多