2013-03-18 5 views
2

Я использую сервер Job Gearman в своем проекте. Я использую драгоценный камень «gearman-ruby». В приложении есть очередь задач. Одна задача состоит из 4 частей.
Соответственно у меня есть 4 рабочих, чтобы решить эту задачу.Переполнение очереди задач ретранслятора с заданными задачами

Моя система решает одну задачу за 10 минут без редуктора. Но когда я использую Gearman, время для решения 10 задач 2-3 часа :(
очередь Gearman расположены в MySQL очереди, переполнением

Cron запускает клиентов, которые устанавливают задачи одну задачу -... Разобрать одну страницу 1-й рабочий - получить страницу (init), 2-й - получить фотографии (изображения), 3-й - получить комментарии (текст), 4-й - получить характеристики (текст). 1-й рабочий получает страницы, другие работники анализируют разные данные с этих страниц.

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 

Помогите мне пожалуйста, чтобы настройки Gearman для скорости работы

+1

Вы предлагаете слишком мало работать. Пожалуйста, добавьте более подробную информацию: (В разумных пределах) характер задач, текущая настройка сервера, код, который выполняет фактическую обработку (работников). Как видно из описания, проблемой может быть что угодно/все. – fmendez

+0

Задача клиента задана, но я вижу эту задачу в gearman.queue (таблица в mysql) через 10-15 минут. И есть задержка ожидания, прежде чем работник начнет выполнять свою задачу. Я смотрю его, когда я тестирую экипировку только по одной задаче. Вот почему я думаю, что проблема в немецких настройках ... – bmalets

+0

добавить «-threads = 12» в config. Задержка перед тем, как работник начинает выполнять свою задачу, значительно сокращается. Но Gearman все еще работает очень медленно ... И очередь переполнена задачами. Задачи решены, но все еще есть в gearman.queue :( – bmalets

ответ

2
  1. Я нашел событие в своем коде, через которое задача не возвращает 'true'. В протоколе gearman, завершенная задача должна возвращать «true».
  2. Я устанавливаю конфигурацию передатчика без хранения настойчивости.


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

З. Я добавляю больше потоков для сервера jobman-сервера с параметром «-threads = threds_count».

И теперь моя система работает быстро и стабильно! :)


Если вы используете для хранения Настойчивость и ваша очередь переполнены: вы можете периодически запускать скрипт для очистки 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

И !!! Вы должны понимать, что в протоколе geaman сказано, что КАЖДЫЙ ЗАДАЧА ДОЛЖЕН ВОЗВРАТИТЬ ИСТИННО. если задача не возвращает true - сервер заданий считает, что задача не завершена, и попробуйте снова запустить эту задачу. поэтому моя очередь была переполнена и медленна. – bmalets

Смежные вопросы