首页 > 解决方案 > Ruby - Fork 抛出 Errno::EPIPE

问题描述

在什么情况下fork do会抛出调用Errno::EPIPE: Broken pipe?我在 AWS 实例上使用 Resque,奇怪的是,虽然 Resque 在登台服务器上运行良好,但当它试图让工作人员在生产服务器上分叉子进程时,它会不断抛出这些损坏的管道错误,即使他们正在使用相同的 AMI。我已经输入了足够多的日志语句来识别当 Resque 尝试分叉时引发的错误:

@child = fork do
          unregister_signal_handlers if term_child
          perform(job, &block)
          exit! unless run_at_exit_hooks
        end

所以错误来自最上面一行(https://github.com/resque/resque/blob/master/lib/resque/worker.rb#L909)。我不清楚为什么fork调用会抛出Errno:EPIPE. 服务器有足够的内存、CPU 和硬盘驱动器可供备用。

标签: rubyresque

解决方案


推荐阅读