【问题标题】:Raku project suddenly starts to fail [closed]Raku项目突然开始失败[关闭]
【发布时间】:2022-06-14 14:44:30
【问题描述】:

我有一个中型 Raku 项目,突然开始在启动时抛出以下错误:

===SORRY!=== Error while compiling /home/patrickb/repos/RakudoCIBot/service.raku
===SORRY!=== Error while compiling /home/patrickb/repos/RakudoCIBot/lib/RakudoCIBot.rakumod (RakudoCIBot)
Now hiting the error and sleeping
===SORRY!=== Error while compiling /home/patrickb/repos/RakudoCIBot/lib/Routes.rakumod (Routes)
Earlier failure:
 Failed to open file /home/patrickb/.raku/precomp/F494CC98E40B399BDACD0E2436C176FDE8706DE8/28/287E340591A8C5DE2625947EEC5BEFDF29E8EA4F: Too many open files
  in any statement_control at /home/patrickb/rrepos/install/share/perl6/lib/Perl6/Grammar.moarvm line 1

Final error:
 Type check failed in binding; expected IO::Handle but got Failure (Failure.new(exceptio...)
at /home/patrickb/repos/RakudoCIBot/lib/Routes.rakumod (Routes):10

at /home/patrickb/repos/RakudoCIBot/lib/RakudoCIBot.rakumod (RakudoCIBot):15

at /home/patrickb/repos/RakudoCIBot/service.raku:3

删除/home/patrickb/repos/RakudoCIBot/.precomp/ 文件夹使其再次成功启动一次。但这既不是解决方案,也不是可接受的解决方法。

发生了什么,我能做些什么来解决这个问题?

【问题讨论】:

    标签: linux raku rakudo


    【解决方案1】:

    #raku IRC 频道中的人们对解决这个问题非常有帮助。

    在出错时停止进程(我编译了自己的 Rakudo 并在打印错误消息的位置之前放置了一个 sleep。)并查看其中一个 rakudo 编译器进程的 /proc/$PID/fd 表明它具有恰好打开了 1024 个文件 (ls -1 /proc/$PID/fd | wc -l)。大多数文件如下所示:

    lr-x------. 1 patrickb patrickb 64 Jun 13 17:20 965 -> /home/patrickb/.raku/precomp/F494CC98E40B399BDACD0E2436C176FDE8706DE8/EA/EA68508E655FD3F22D1AE0A8666B86469073473
    

    所以是编译器打开了许多预编译文件。这实际上是相当合理的,因为依赖关系树可以很容易地在具有一个或两个更大依赖项的非平凡项目中包含 > 1000 个文件。 (在我的情况下,部门中有Red 和Cro。)

    ulimit -Sn 打印 1024。所以我有一个相当低的限制。在运行我的应用程序之前调用 ulimit -n 4096 使其工作。

    考虑到以上所有,干净的解决方案似乎是将以下内容添加到/etc/security/limits.conf:

    # Increase nofile soft from the default of 1024.
    # The Rakudo compiler sometimes hits the limit.
    *               soft    nofile          4096
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多