减速机任务队列溢出并完成任务
我在我的项目中使用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的速度工作
- 我在我的代码中发现了一个事件,通过这个事件不返回'true'。在减速器协议中,完成的任务必须返回“真”。
- 我设置了没有持久性存储的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. ***'
AND !!!您必须了解,geaman协议规定每个任务必须返回真实。如果任务不返回true - 作业服务器认为该任务未完成并尝试再次启动此任务。这就是为什么我的队列溢出和缓慢。 – bmalets 2013-03-27 23:11:45
你提供的工作太少了。请添加更多详细信息:(在合理的范围内)任务的性质,当前的服务器设置以及执行实际处理(工作人员)的代码。正如描述所述,问题可能是任何事情/一切。 – fmendez 2013-03-18 16:03:58
客户端设置任务,但我在10-15分钟后在gearman.queue(mysql表中)中看到此任务。在工人开始执行任务之前,有一段时间的延迟。我只在1个任务中测试了减速器的时候看着它。这就是为什么我认为这个问题是在德国的设置... – bmalets 2013-03-18 17:38:19
添加“ - 线程= 12”到配置。工人开始执行任务之前的延迟明显减少。但是Gearman仍然工作得非常缓慢......并且队列溢出了任务。任务解决了,但仍然存在于gearman.queue :( – bmalets 2013-03-18 17:51:05