我在 Laravel 中为我的处理脚本设置了队列。我正在使用 beanstalkd 和 supervisord。有 6 种不同的管用于不同类型的处理。
问题在于,对于每根管子,工匠每秒都在不断地产生工人。工作人员代码似乎休眠了 1 秒,然后工作线程使用 7-15% 的 cpu,将其乘以 6 个管......我希望每管有多个工作人员......我的 cpu 被吃光了。
我尝试将 1 秒睡眠更改为 10 秒。这有帮助,但是当工作人员醒来时,每 10 秒仍然会有一个巨大的 CPU 峰值。我现在什至没有处理任何事情,因为队列完全是空的,只是工人在找事情做。
当我在浏览器中刷新页面并且徘徊在 10% 左右时,我还测试了 laravel 的 cpu 使用情况。我现在在一个低端机架空间实例上,这样可以解释它,但仍然......看起来像工作人员每次醒来都会启动一个 laravel 实例。
有没有办法解决这个问题?我是否只需要在更昂贵的服务器上投入大量资金,就可以聆听工作是否准备就绪?
编辑:
找到了一个解决方案......它是不使用工匠队列:侦听器或队列:工作我查看了队列代码,似乎没有办法解决这个问题,每次工作人员检查时都需要加载 laravel做更多的工作。
相反,我使用 pheanstalk 编写了自己的监听器。我仍在使用 laravel 将内容推送到队列中,然后我的自定义侦听器正在解析队列数据,然后触发 artisan 命令运行。
现在我的听众的 cpu 使用率低于 %0,我的 cpu 现在唯一一次启动是当它真正找到工作要做然后触发命令时,我很好。