【问题标题】:How to check if sidekiq is started?如何检查sidekiq是否启动?
【发布时间】:2014-03-20 17:11:15
【问题描述】:

我正在使用带有 Rails 3 的 Sidekiq Gem。有没有办法查看 sidekiq 工作人员是否准备好处理作业?我们想确保这些东西不只是被排入队列并坐在那里。我尝试过这样的事情......

stats = Sidekiq::Stats.new
puts stats.queues

但是,如果 redis 已启动,即使 sidekiq 尚未准备好处理作业,它也将始终返回默认值 => 0。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 sidekiq


    【解决方案1】:

    首先,您的工作进程应该正在运行。检查这个:

    ps = Sidekiq::ProcessSet.new
    ps.size # => 2
    ps.each do |process|
      p process['busy']     # => 3
      p process['hostname'] # => 'myhost.local'
      p process['pid']      # => 16131
    end
    ps.each(&:quiet!) # equivalent to the USR1 signal
    ps.each(&:stop!) # equivalent to the TERM signal
    

    来自https://github.com/mperham/sidekiq/wiki/API#processes

    因此,如果他们这样做了 - 您可以加入更多工作。当您的工作进程正在工作时任务可以保留在队列中的唯一情况是当工作进程处理作业的速度比它们进来的慢时。然后您的队列将增长并且在所有先前的作业完成之前不会处理新入队的任务。但你有责任找出为什么你的员工表现缓慢。

    希望有帮助!

    【讨论】:

      【解决方案2】:

      您可以访问 Sidekiq Workers API 以访问活动的工作程序集:

      worker_api = Sidekiq::Workers.new
      worker_api.size
       => 1
      worker_api.each {|worker| do_stuf(worker) }
      

      最简单的解决方案是通过 Worker API 的 size 属性访问 API 并等待预期数量的工作进程启动并运行。

      【讨论】:

      • 我已启动并运行 Sidekiq,但此方法仍为我返回 0
      • 您的环境有些问题。您的 Sidekiq 客户端 API 加载的环境没有连接到与 Sidekiq 服务器相同的 Redis sidekiq 数据库,或者服务器实际上没有成功启动并在 Redis 中注册。例如,如果您在生产 Rails 环境中运行 Sidekiq 服务器,但在开发环境中运行 API 客户端(不同的 redis DB)。
      • 请注意,您首先需要require sidekiq/api 才能访问Sidekiq::Workers。而且我还建议Sidekiq::ProcessSet.new.size 更有助于判断 Sidekiq 是否启动,因为Sidekiq::Workers 仅指当前正在运行的作业,而不是 Sidekiq 本身是否只是在监听。
      【解决方案3】:

      就我自己而言,我更喜欢在控制台(在我的服务器上或本地)中运行以下命令:

      ps -ef | grep "sidekiq"
      

      【讨论】:

      • 我通常也使用ps u 来获取有关资源使用情况的信息
      猜你喜欢
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 2013-05-18
      • 2014-03-30
      • 2012-02-17
      相关资源
      最近更新 更多