【问题标题】:ThreadError can't create Thread (11) using rufus-scheduler in Sinatra app on HerokuThreadError 无法在 Heroku 上的 Sinatra 应用程序中使用 rufus-scheduler 创建线程 (11)
【发布时间】:2014-03-07 10:24:50
【问题描述】:

我正在 Heroku 上运行一个使用 Thin、Ruby 2.0.0 的 Sinatra 应用程序。每隔 16 小时左右,我就会在日志中收到此错误,并且我的 rufus-scheduler 调度块中的所有内容都停止运行。

对出了什么问题有什么想法吗?

  70217056739720     Rufus::Scheduler::EveryJob "5m" {}
  70217056739720     70217056739720
  70217056739720     ThreadError
  70217056739720     can't create Thread (11)
{ 70217056739720 rufus-scheduler intercepted an error:
  70217056739720   job:
  70217056739720   error:
  70217056739720       /app/lib/pusher_benchmarker.rb:26:in `initialize'
  70217056739720       /app/lib/services_runner.rb:13:in `new'
  70217056739720       /app/vendor/bundle/ruby/2.0.0/gems/pusher-client-0.4.0/lib/pusher-client/socket.rb:62:in `initialize'
  70217056739720       /app/vendor/bundle/ruby/2.0.0/gems/pusher-client-0.4.0/lib/pusher-client/socket.rb:62:in `connect'
  70217056739720       /app/lib/services_runner.rb:9:in `initialize'
  70217056739720       /app/vendor/bundle/ruby/2.0.0/gems/pusher-client-0.4.0/lib/pusher-client/socket.rb:62:in `new'
  70217056739720       /app/lib/pusher_benchmarker.rb:34:in `connect'
  70217056739720       /app/vendor/bundle/ruby/2.0.0/gems/rufus-scheduler-3.0.6/lib/rufus/scheduler/jobs.rb:288:in `block (2 levels) in start_work_thread'
  70217056739720       /app/vendor/bundle/ruby/2.0.0/gems/rufus-scheduler-3.0.6/lib/rufus/scheduler/jobs.rb:285:in `block (3 levels) in start_work_thread'
  70217056739720       /app/vendor/bundle/ruby/2.0.0/gems/rufus-scheduler-3.0.6/lib/rufus/scheduler/jobs.rb:288:in `call'
  70217056739720       /app/app.rb:46:in `new'
  70217056739720       /app/app.rb:46:in `block (2 levels) in <class:BenchmarkAnalysis>'
  70217056739720       /app/vendor/bundle/ruby/2.0.0/gems/rufus-scheduler-3.0.6/lib/rufus/scheduler/jobs.rb:224:in `call'
  70217056739720       /app/vendor/bundle/ruby/2.0.0/gems/rufus-scheduler-3.0.6/lib/rufus/scheduler/jobs.rb:224:in `do_call'
  70217056739720       /app/vendor/bundle/ruby/2.0.0/gems/rufus-scheduler-3.0.6/lib/rufus/scheduler/jobs.rb:248:in `do_trigger'
  70217056739720       /app/lib/services_runner.rb:13:in `initialize_services'
} 70217056739720 .
  70217056739720       /app/vendor/bundle/ruby/2.0.0/gems/rufus-scheduler-3.0.6/lib/rufus/scheduler/jobs.rb:274:in `loop'
  70217056739720       /app/vendor/bundle/ruby/2.0.0/gems/rufus-scheduler-3.0.6/lib/rufus/scheduler/jobs.rb:274:in `block in start_work_thread'

【问题讨论】:

标签: ruby heroku sinatra rufus-scheduler


【解决方案1】:

所以如果 Heroku 限制线程数,我会限制 rufus-scheduler 中的工作线程。

https://github.com/jmettraux/rufus-scheduler/#max_work_threads

您可以在实例化调度程序时对其进行调整,例如:

scheduler = Rufus::Scheduler.new(:max_work_threads => 7)

默认 max_work_threads 为 28。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-01
    • 2016-06-14
    • 2012-01-14
    • 2010-11-06
    • 2012-04-11
    • 1970-01-01
    • 2011-12-24
    相关资源
    最近更新 更多