2013-03-18 100 views
2

我在我的项目中使用Gearman Job服务器。我使用'gearman-ruby'宝石。 应用程序中有一个任务队列。一项任务有4个部分。
恰当地,我有4名工人来解决这部分任务。减速机任务队列溢出并完成任务

我的系统在10分钟内解决1个任务,没有工人。但是当我使用减速机时,解决10个任务的时间是2-3小时:(
减速机队列位于mysql中,队列溢出

Cron启动客户端,它设置任务一个任务 - 解析一个页面 1st worker - 获取页面(init),2nd - 获取照片(images),3rd - 获取评论(text),4rd - 获取特性(text),1 worker获取页面,其他worker分析这些页面的不同数据

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 

帮助我,请设置Gearman的速度工作

+1

你提供的工作太少了。请添加更多详细信息:(在合理的范围内)任务的性质,当前的服务器设置以及执行实际处理(工作人员)的代码。正如描述所述,问题可能是任何事情/一切。 – fmendez 2013-03-18 16:03:58

+0

客户端设置任务,但我在10-15分钟后在gearman.queue(mysql表中)中看到此任务。在工人开始执行任务之前,有一段时间的延迟。我只在1个任务中测试了减速器的时候看着它。这就是为什么我认为这个问题是在德国的设置... – bmalets 2013-03-18 17:38:19

+0

添加“ - 线程= 12”到配置。工人开始执行任务之前的延迟明显减少。但是Gearman仍然工作得非常缓慢......并且队列溢出了任务。任务解决了,但仍然存在于gearman.queue :( – bmalets 2013-03-18 17:51:05

回答

2
  1. 我在我的代码中发现了一个事件,通过这个事件不返回'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. ***' 

+0

AND !!!您必须了解,geaman协议规定每个任务必须返回真实。如果任务不返回true - 作业服务器认为该任务未完成并尝试再次启动此任务。这就是为什么我的队列溢出和缓慢。 – bmalets 2013-03-27 23:11:45