2

プロジェクトでGearmanJobサーバーを使用しています。'gearman-ruby'gemを使用しています。アプリにはタスクのキューがあります。1つのタスクには4つの部分があります。
適切には、私にはタスクのこの部分を解決するために4人の労働者がいます。

私のシステムは、ギアマンなしで10分で1つのタスクを解決します。しかし、gearmanを使用する場合、10個のタスクを解決する時間は2〜3時間です:(
Gearmanキューはmysqlにあります。キューはオーバーフローしています。

Cronは、タスクを設定するクライアントを起動します。1つのタスク-1ページを解析します。1番目のワーカー-ページ(init)を取得、2番目-写真(画像)を取得、3番目-コメント(テキスト)を取得、4番目-特性(テキスト)を取得。最初のワーカーはページを取得し、他のワーカーはこのページとは異なるデータを解析します。

ギアマン構成:



    $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

スピードワーキングのためにギアマンをセットアップするのを手伝ってください

4

1 に答える 1

2
  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スクリプトを定期的に呼び出すことで解決しました(これには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. ***'

于 2013-03-27T22:58:55.107 に答える