Gearman任务队列中已完成的任务过多



我在项目中使用Gearman作业服务器。我用的是"gearman-ruby"宝石。app中有一个任务队列,一个任务有4部分。
适当地,我有4个工人来解决这部分任务。

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

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

gearman配置:


    $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

请帮我设置齿轮箱的速度工作

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

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

З。我用'——threads=threds_count'参数为gearman job-server添加了更多的线程。

现在我的系统工作又快又稳定!:)


如果您使用持久性存储并且您的队列溢出:您可以定期运行脚本来清理gearman_queue。我通过定期调用sh script(我使用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. ***'

相关内容

  • 没有找到相关文章

最新更新