如何提高GitHub Actions的文件限制?

问题描述 投票:0回答:1

我有以下错误:

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 actions 中我找不到办法做到这一点。

我的 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

node.js github continuous-integration gatsby github-actions
1个回答
2
投票

听起来这些 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 局限性。该 docker 镜像正在强制 fs.inotify.max_user_watches 限制为 524288,但显然 GHA 是 将其覆盖回 8192。您可以在 fork 中看到这种情况发生 你的仓库(当我们完成后,我会删除ofc的fork,如果 您想早点将其删除)。

继续...

是的,这与您运行的环境的限制有关 Expo CLI 中。 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 与 Graceful-fs 位于顶部 下面代码片段中的 gatsby-node.js 为我解决了这个问题。

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

EDIT2:实际上从节点 10 升级到节点 11 后一切 似乎不需要修补 fs 就可以了...所以一切都很好!

© www.soinside.com 2019 - 2024. All rights reserved.