ruby - gearman 任务队列因已完成的任务而溢出

标签 ruby gearman

我在我的项目中使用 Gearman 作业服务器。我使用“gearman-ruby” gem 。 应用程序中有一个任务队列。一项任务有 4 个部分。
适本地,我有 4 个 worker 来解决这部分任务。

我的系统在没有 gearman 的情况下在 10 分钟内解决了 1 项任务。但是当我使用 gearman 时,解决 10 个任务的时间是 2-3 小时:(
Gearman队列位于mysql中。队列溢出。

Cron 启动客户端,设置任务。一项任务 - 解析一页。 第一个 worker - 获取页面(初始化),第二个 - 获取照片(图像),第三个 - 获取评论(文本),第四个 - 获取特征(文本)。第一个工作人员获取页面,其他工作人员从该页面解析不同的数据。

齿轮配置:



    $cat /etc/sysconfig/gearmand 
    ## Settings for gearmand
    OPTIONS="--listen=127.0.0.1
             --job-retries=3 \
             --log-file=/var/log/gearman.log \
             --queue-type=MySQL \
             --mysql-host=localhost \
             --mysql-port=3306 \
             --mysql-db=gearman \
             --mysql-table=queue"

    $gearmand --version
    gearmand 0.35

请帮我设置 gearman 以实现速度工作

最佳答案

  1. 我在代码中发现了一个事件,通过该事件任务不会返回“true”。在 gearman 协议(protocol)中,完成的任务必须返回“true”。
  2. 我设置 gearman 配置时没有持久存储。


    OPTIONS="--listen=127.0.0.1
                 --job-retries=3 \
                 --log-file=/var/log/gearman.log \
                 --threads=12"

З。我使用“--threads=threds_count”参数为 gearman 作业服务器添加更多线程。

现在我的系统运行快速且稳定! :)


如果您使用持久性存储并且队列溢出:您可以定期运行脚本来清理 gearman_queue。我通过定期调用 sh 脚本解决了这个问题(我使用 cron 来实现):



    # stop gearman
    sudo /etc/init.d/gearman stop
    # delete tasks from DB
    mysql -Bse 'DELETE FROM queue' gearman -u root
    # start gearmand back
    sudo /etc/init.d/gearman start
    echo '*** gearman queue cleaned. ***'

关于ruby - gearman 任务队列因已完成的任务而溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15481150/

相关文章:

php - 有什么方法可以访问 Gearman 管理?

php - Gearman worker - 限制 worker 将处理的工作量

ruby - 在 rspec 中为 after_create Hook 创建 stub

php - 在 gearman 工作人员之间共享 curl 处理程序

php - PHP 中消息队列和工作系统的有效架构?

python - 如何通过他们的唯一 ID 获取 Gearman Jobs 的状态?

ruby - "google-search"gem 的示例代码不起作用?

ruby-on-rails - 具有一对多关联的 Demeter 定律

ruby - 此代码示例中的逗号是什么?

ruby 摩卡 : is there an equivalent to rspec-mocks' #and_call_original?