2013-03-18 83 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