gpt4 book ai didi

ruby - gearman 任务队列因已完成的任务而溢出

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:12 24 4
gpt4 key购买 nike

我在我的项目中使用 Gearman Job 服务器。我使用 'gearman-ruby' gem 。应用程序中有一个任务队列。一项任务有 4 个部分。
适本地,我有 4 个 worker 来解决这部分任务。

我的系统在没有 gearman 的情况下在 10 分钟内解决了 1 个任务。但是当我使用 gearman 时,解决 10 个任务的时间是 2-3 小时:(
Gearman 队列位于 mysql 中。队列溢出。

Cron 启动设置任务的客户端。一项任务 - 解析一页。第一个 worker - 获取页面(初始化),第二个 - 获取照片(图像),第三个 - 获取评论(文本),第四个 - 获取特征(文本)。第一个工作人员获取页面,其他工作人员从该页面解析不同的数据。

齿轮配置:



$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. 我在我的代码中发现了一个事件,任务不会通过该事件返回“true”。在 gearman 协议(protocol)中,完成的任务必须返回“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. ***'

关于ruby - gearman 任务队列因已完成的任务而溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15481150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com