Raspberry Pi上的WEBrick提供了#34; ThreadError:无法创建Thread"跑了一会儿

时间:2013-11-14 02:24:13

标签: ruby-on-rails ruby-on-rails-4 raspberry-pi webrick

我遇到了WEBrick + Rails问题&我无法找到同样问题的其他人。

我使用

在我的Rails应用程序中运行WEBrick
$ rvmsudo rails server -p 80

然后我将它留在一个分离的screen中并注销。如果我等了几天,WEBrick会停止提供请求,每当有人试图加载应用程序时都会这样做:

ERROR ThreadError: can't create Thread (11)
    /home/pi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/webrick/server.rb:284:in `start'

然后,当我尝试停止服务器并使用Control-C重新启动它时,有时会显示此信息,我必须按两次Control-C才能将其删除:

[2013-11-13 21:13:08] ERROR NoMethodError: undefined method `shutdown' for nil:NilClass
    /home/pi/.rvm/gems/ruby-2.0.0-p247/gems/rack-1.5.2/lib/rack/handler/webrick.rb:25:in `shutdown'

我尝试检查我的服务器是否有足够的资源 - 足够的RAM,CPU,磁盘空间,交换和网络I / O。一切看起来几乎与Rails正常运行时相同(这是一个非常简单的应用程序)。

软件&硬件细节:Rails 4.0.1与ruby 2.0.0p247(2013-06-27修订版41674)[armv6l-linux-eabihf]在Raspberry Pi上运行,带有最新的Raspbian。

Source of my app is on GitHub。它正在http://door.servebeer.com/运行。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我怀疑自己是否达到了与Pi资源无关的某种限制。我注意到,每次我在浏览器中重新加载应用程序时,都会生成三个新的Ruby线程。

运行this forkbomb-like test,我发现Pi上的Ruby在提供ThreadErrors之前可以运行大约300个线程。因此,在每次~100次网页浏览后,服务器将停止提供页面,因为它已经达到了线程限制。

这似乎是运行ARM(可能是WEBrick的另一个错误)的问题。当我在英特尔Ubuntu服务器上运行Rails 4.0.1和Ruby 2.0.0时,线程没有保持打开状态。