Laravel - 队列工作者,高CPU

时间:2016-07-18 16:23:01

标签: php laravel amazon-web-services amazon-sqs supervisord

我有一个Laravel应用程序(在Forge上),它正在向SQS发送消息。然后我在Forge上有另一个框,它正在运行Supervisor,队列工作者正在使用来自SQS的消息。

现在,我只有一个守护进程工作者处理来自SQS的特定数据管。当消息出现时,它们确实需要一些时间来处理 - 在30到60秒之间。盒子上的内存使用情况很好,但CPU几乎立即激增,然后一切似乎都变慢了。

有没有办法解决这个问题?我是否应该派遣许多较小的工作(可以由多个工人消费)而不是一个不能在工人之间分配的大工作?

另外,我注意到Supervisor只使用了我的两个核心之一。有什么方法可以同时使用它们吗?

1 个答案:

答案 0 :(得分:1)

只要提供扩展功能,就可以管理具有内存密集型应用程序,但是CPU峰值难以管理,因为它发生在一个内核中,而且如果发生这种情况,有时甚至可能会将服务器放到沙盒中。

为回答您的问题,我看到了两种可能的方法来处理您的问题。

  1. 并行编程。照原样进行,看看是否可以并行处理更大的任务。 (请参见this)。如果支持,则并行化代码以确保每个核心处理大型任务的特定部分。最后,将结果收集到一个协调的核心中并汇总最终结果。 (此外:考虑到GPU编程,可以有效地做到这一点)
  2. 分派较小的工作(如问题所述):如果您可以管理多个处理较小任务的工人,并且最终有一种将所有事物协调在一起的机制,这是一个好方法。这可以安排为主从设置。这会使一切变得容易(因为并行化一个问题有点困难),但是您需要将所有事物协调在一起。