标签: beanstalkd

delayed_jobs vs resque vs beanstalkd?

这是我的需求:

  • Enqueue_in(10.hours,...)(DJ语法很完美.)
  • 兼职工人.(Resque或beanstalkd对此有好处,但不是DJ)
  • 必须每秒处理100个作业的推送和弹出.(我需要进行测试以确保,但我认为DJ无法处理这么多工作)

Resque和beanstalkd不执行enqueue_in.

有一个插件(resque_scheduler)可以做到这一点,但我不确定它是多么稳定.

我们的环境是关于亚马逊的,他们为亚马逊实例免费推出了beanstalkd,这对我们来说是一个加分,但我仍然不确定这里最好的选择是什么.

我们运行rails 2.3但是我们很快就将其加速到rails 3.0.3.

但这里我最好的选择是什么?我错过了另一个更好地完成这项工作的宝石吗?

我觉得我现在唯一可行的选择是resque_scheduler.

编辑:

Sidekiq(https://github.com/mperham/sidekiq)是另一个你应该检查的选项.

ruby-on-rails beanstalkd resque redis

64
推荐指数
3
解决办法
2万
查看次数

Beanstalkd的Stats/Monitor/Inspector

有谁知道一个可以监视beanstalkd队列的应用程序?我正在寻找显示管和工作统计数据的东西,并允许您检查细节.

我对语言/平台并不是很挑剔,只是想在我自己编写之前知道是否有某些东西.

monitoring message-queue job-queue beanstalkd

25
推荐指数
2
解决办法
2万
查看次数

上帝开始了太多的过程

我有一个上帝脚本,应该留意两个跟踪者进程.问题是24小时后启动的过程太多了.

这是神剧本.

rails_root = File.expand_path("../..", __FILE__)

2.times do |n|
  God.watch do |w|
    w.group = "app-scripts"
    w.name  = "run-#{n}"
    w.interval = 30.seconds
    w.dir      = File.dirname(__FILE__)

    w.env = {
      "BUNDLE_GEMFILE" => "#{rails_root}/Gemfile",
      "RAILS_ENV" => "production",
      "BEANSTALK_URL" => "beanstalk://127.0.0.1:54132"
    }

    w.start = "bbundle exec stalk #{File.join(rails_root, "config/jobs.rb")}"

    w.start_grace = 5.seconds
    w.stop_grace  = 5.seconds

    w.start_if do |start|
      start.condition(:process_running) { |c| c.running = false }
    end

    w.restart_if do |restart|
      restart.condition(:memory_usage) do |c|
        c.above = 200.megabytes
        c.times = [3, 5]
      end

      restart.condition(:cpu_usage) do |c|
        c.above …
Run Code Online (Sandbox Code Playgroud)

ruby god beanstalkd

24
推荐指数
2
解决办法
2468
查看次数

如何获取beanstalk管中所有作业的列表?

我在我的服务器上安装了beanstalk,并运行以下命令:

$ telnet localhost 11300
use my_tube
USING my_tube
peek-ready
FOUND 11065 41
{"ts":1295537419,"data":{"nid":"212156"}}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:如何获得队列中所有作业的列表; 类似的东西peek-all

beanstalkd

23
推荐指数
1
解决办法
2万
查看次数

Laravel Artisan Queues - 高CPU使用率

我在Laravel中为我的处理脚本设置了队列.我正在使用beanstalkd和supervisord.有6种不同的管用于不同类型的加工.

问题在于,对于每个管子,工匠每秒都在不断地产生工人.工作者代码似乎睡了1秒然后工作线程使用7-15%cpu,乘以6管......我想每管多个工人......我的cpu被吃掉了.

我尝试将1秒睡眠改为10秒.这有助于但是当工人们醒来时,每10秒仍有一个巨大的CPU峰值.我现在甚至没有处理任何事情,因为队列完全是空的,只是工人正在寻找要做的事情.

当我在浏览器中刷新页面并且徘徊在10%左右时,我还测试了laravel的cpu使用情况.我现在正处于低端机架空间实例,这样可以解释它但仍然......看起来像每当他们醒来时,工人就会开出一个laravel实例.

有没有办法解决这个问题?我是否只需要将更多的钱投入更昂贵的服务器,以便能够听取工作是否准备就绪?

编辑:

找到一个解决方案...它不是使用工匠队列:监听器或队列:工作我查看了队列代码,似乎没有解决这个问题的方法,它需要laravel加载每次工人检查做更多的工作.

相反,我使用pheanstalk编写了自己的监听器.我仍然使用laravel将事物推入队列,然后我的自定义侦听器正在解析队列数据,然后触发一个artisan命令来运行.

现在我的侦听器的cpu使用率在%0以下,我的cpu现在唯一的时间就是当它实际找到工作然后触发命令时,我很好.

beanstalkd supervisord laravel laravel-4

17
推荐指数
2
解决办法
9489
查看次数

消息队列通过CRON与DB表队列相对应

我们有一个很大的项目即将推出,有很多媒体处理(图像,视频)以及电子邮件输出等,通常我们将这些东西放入一个名为"email_queue"的表中,我们使用cron来运行脚本处理表中的队列.

我已经在像Beanstalkd这样的Message Queue系统上阅读了很多内容,甚至还设置了它.这很容易使用,问题是我不确定我是否遗漏了一些东西.

有人可以详细说明使用队列系统而不是表和CRON的好处吗?因为我真的看不到它们是什么.

谢谢

message-queue beanstalkd starling-server

16
推荐指数
2
解决办法
6203
查看次数

删除laravel中的排队作业

我已将一些作业添加到laravel中的队列中.但是,我忘$job->delete()了输入函数,我的函数也有错误.这意味着工作永无止境.它不断进入它并在我的日志文件中保持错误.如何从命令行中删除它?

我正在使用beanstalkf进行排队.

php beanstalkd laravel

16
推荐指数
2
解决办法
3万
查看次数

长时间运行的PHP脚本的内存注意事项

我想使用Zend Framework 2控制器在php中为beanstalkd编写一个worker .它通过CLI启动并将永久运行,从此示例中请求来自beanstalkd的作业.

在简单的伪类代码中:

while (true) {
    $data   = $beanstalk->reserve();

    $class  = $data->class;
    $params = $data->params;

    $job    = new $class($params);
    $job();
}
Run Code Online (Sandbox Code Playgroud)

$job这里有一个__invoke()过程的方法.但是,这些工作中的某些事情可能会持续很长时间.有些可能会运行相当大的内存.有些人可能注入了$beanstalk对象,自己开始新的工作,或者有一个Zend\Di\Locator实例从DIC中提取对象.

我很担心这种设置对于在长期的生产环境,为可能的循环引用可能会产生,(此时)我不明确"做"任何垃圾回收,而这个动作可能运行数周/月/年*.

*)在beanstalk中,reserve是一个阻塞调用,如果没有可用的作业,这个worker将等到从beanstalk获得任何响应.

我的问题:php如何长期处理这个问题,我是否应该采取任何特殊的预防措施来防止这种情况发生?

我确实考虑过并且可能会有所帮助(但如果我错了请更正并在可能的情况下添加更多内容):

  1. 在开始循环之前使用gc_enable()
  2. 在每次迭代中使用gc_collect_cycles()
  3. $job在每次迭代中取消设置
  4. __destruct()从a中明确取消引用$job

(注意:从这里更新)

我确实用任意工作进行了一些测试.我包括的工作是:"简单",只是设置一个值; "longarray",创建一个包含1,000个值的数组; "producer",让循环注入$pheanstalk并向队列添加三个simplejobs(所以现在有一个从job到beanstalk的引用); "locatoraware",其中Zend\Di\Locator给出了a 并且实例化了所有作业类型(尽管未调用).我在队列中添加了10,000个作业,然后我将所有作业保留在队列中.

"simplejob"的结果(每1000个工作的内存消耗,有memory_get_usage())

0:     56392
1000:  548832
2000:  1074464
3000:  1538656
4000:  2125728
5000:  2598112
6000: …
Run Code Online (Sandbox Code Playgroud)

php memory garbage-collection command-line-interface beanstalkd

15
推荐指数
1
解决办法
6121
查看次数

Beanstalkd for CentOs 7

由于配置错误,我将VPS从CentOs 6迁移到CentOs 7,重新开始.除此之外,我还在CentOs 6上安装了beanstalkd服务.

当时我已经按照本教程访问http://viewsfromtheside.com/2014/06/12/install-beanstalkd-centos-6/,它对我来说非常有用.

但现在,我无法在我的CentOs 7版本上安装Beanstalkd.

我将这些行用于EPEL回购:

# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-2.noarch.rpm
# rpm -ivh epel-release-7-2.noarch.rpm
Run Code Online (Sandbox Code Playgroud)

然后我尝试了:

# yum install beanstalkd --enablerepo=epel-testing
Run Code Online (Sandbox Code Playgroud)

并且:

# yum --disablerepo="*" --enablerepo="epel" list available | grep 'beanstalkd'
Run Code Online (Sandbox Code Playgroud)

乃至 :

#  yum search beanstalkd
Run Code Online (Sandbox Code Playgroud)

但仍然:找不到匹配:beanstalkd ...

我是CentOs和EPEL repos的新手,所以也许我错过了什么?无论如何,我如何在CentOs 7上安装Beanstalkd?

linux beanstalkd epel centos7

13
推荐指数
1
解决办法
6662
查看次数

Laravel Queue,Beanstalkd vs Database,有什么区别?

使用Beanstalkd和队列的数据库驱动程序有很大区别吗?

一些优点和缺点是什么?数据库队列似乎更容易设置和运行,我应该知道如何使用它?

在有关它的文档中没有真正的解释.

database message-queue beanstalkd laravel laravel-5

13
推荐指数
2
解决办法
6668
查看次数