LAMP / Laravel - 报告生成最大化单个CPU

时间:2016-03-14 20:50:23

标签: php mysql apache laravel

所以我在Laravel开发了一个报告生成系统。我们在centos 7盒子上使用php 7(启用了opcache)/ apache / mysql /。有了一个报告,获取所有信息最终需要大约15秒,但后来我必须循环并对集合等进行一系列过滤等。我已经从上到下优化了大约一周,并获得了整个报告生成需要大约45秒(处理超过100万个条目的多个表)。这最大化了我的CPU,直到完成它为止。

我的问题是,当我们将它推送到客户端时,他们的CPU无法完成任务。它们有2个cpu的@ 8核心,每个@ 2.2ghz。但是,由于php是一个单独的进程,它只能在一个cpu上运行并最大化它,因为它太慢,所以运行报告需要近10分钟。

有没有办法得到apache / php / linux ......无论如何....使用所有4个cpu的单个php进程?唯一的另一个选择是告诉客户他们需要一个更好的服务器....不是一个选项。请帮忙。

1 个答案:

答案 0 :(得分:0)

所以我不再试图让服务器更好地处理我的代码,并找到了一些方法来优化我的代码。

首先,我使用集合groupBy()方法对我的集合进行分组,以便我有一堆id为key的子数组。当我循环使用这些时,我只是抓住了那个子数组而不是使用集合的filter()方法,这种方法在处理这么多项时非常慢。这为我节省了大量的处理能力。

其次,每次我使用子数组时,我都会从主数组中删除它。因此,每次通过foreach时,阵列变得越来越小。

这些优化最终为我节省了大量的处理能力,现在我的报告运行良好。经过几天寻找允许php处理并行处理等的方法后,我得出的结论是它根本不可能。

希望这有帮助。