gpt4 book ai didi

laravel - 为什么我的 Laravel 队列命令在 Redis 队列驱动程序上随着时间的推移变慢?

转载 作者:IT王子 更新时间:2023-10-29 06:10:42 26 4
gpt4 key购买 nike

我正在使用 Redis 驱动程序在多个队列和多个队列工作程序上处理多种类型的作业。例如,假设我正在制作一个监控服务,它将监控服务器的连接和网站的正常运行时间。

我安排了主命令,它将从数据库中选择模型并将另一个命令排队。所以,假设我有 1000 个网站和 300 台服务器要监控,master 命令将每 15 分钟执行一次,它会在它们的特定队列(serverMonitor 和 uptimeMonitor)中添加总共 1000 个网站和 300 台服务器。

问题是,当我启动/重新启动我使用 Supervisor 配置的工作程序时,QueuedCommands 执行得非常快。就像他们在 1/2 时间内处理所有工作一样。随着时间的推移,比如说 24 小时,当我检查队列时,我发现有数千个无人值守的排队命令。

我有 8 个工作人员为 UptimeMonitor 队列运行,5 个工作人员为 ServerMonitor 队列运行。当我启动/重新启动工作人员时,UptimeMonitor 每秒会处理 5-6 个排队命令,但 24 小时后,它每 2 秒只会处理 1 个排队命令。

我确定我的 Supervisor 配置中没有 --sleep=x 标志。我有什么想念的吗?有没有人以前经历过这种情况?

最佳答案

当您有忙碌的员工时,这是一条经验法则。他们将开始争夺资源。

八个 worker 竞争同一个 CPU 核心,每人将获得大约 12.5% 的核心。

每个 worker 都会“放慢速度”,所以你不会得到任何好处。而且你会在这两者之间失去性能,因为操作系统将需要管理进程的调度,这意味着你会得到更多的中断和上下文切换。

要查看您是否有足够的工作器,可以通过两个衡量指标:吞吐量和延迟。

Throughput: are you creating new jobs faster than you can handle them ? Which to me this looks the trouble that you are having. You have low throughtput.

Latency: If jobs are completed in time that you think is acceptable.

在我看来,您的情况似乎是低吞吐量问题建议:

  1. 一般会增加您的硬件容量(强大的 CPU,更多内存)。
  2. 在 AWSSQS 上对工作人员进行排队,将工作人员分散在不同的机器上。

关于laravel - 为什么我的 Laravel 队列命令在 Redis 队列驱动程序上随着时间的推移变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51836654/

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