gearman任务队列溢出了完成的任务

时间:2013-03-18 15:53:50

标签: ruby gearman

我在我的项目中使用Gearman Job服务器。我使用'gearman-ruby'宝石。 应用程序中有一个任务队列。一项任务有4个部分 我有4名工人来解决这部分任务。

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

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

gearman configs:



    $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 个答案:

答案 0 :(得分:2)

  1. 我在代码中发现了一个事件,通过该事件任务不会返回'true'。在gearman协议中,完成的任务必须返回'true'。
  2. 我设置了没有持久存储的gearman配置。
  3. 
    
        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脚本来解决它(我使用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. ***'