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

Php LAMP/Laravel-报告生成最大化单个CPU,php,mysql,apache,laravel,Php,Mysql,Apache,Laravel,所以我在Laravel开发了一个报告生成系统。我们在centos 7机器上使用PHP7(支持opcache)/apache/mysql/。对于一份报告,获取所有信息最终需要大约15秒的时间,但随后我必须循环,并对集合等进行一系列过滤。我已经从上到下对此进行了大约一周的优化,整个报告生成过程大约需要45秒(处理超过100万个条目的多个表)。当然,这会使我的CPU达到最大值,直到完成为止 我的问题是,当我们将其实时推送到客户机时,他们的CPU无法完成任务。他们有4个CPU的@8个内核,每个@2.2g

所以我在Laravel开发了一个报告生成系统。我们在centos 7机器上使用PHP7(支持opcache)/apache/mysql/。对于一份报告,获取所有信息最终需要大约15秒的时间,但随后我必须循环,并对集合等进行一系列过滤。我已经从上到下对此进行了大约一周的优化,整个报告生成过程大约需要45秒(处理超过100万个条目的多个表)。当然,这会使我的CPU达到最大值,直到完成为止

我的问题是,当我们将其实时推送到客户机时,他们的CPU无法完成任务。他们有4个CPU的@8个内核,每个@2.2ghz。然而,由于php是一个单独的进程,它只在一个CPU上运行,并将其最大化,而且速度太慢,运行报告需要近10分钟


有没有办法让apache/php/linux…随便什么…将所有4个cpu用于一个php进程?唯一的另一个选择是告诉客户端他们需要一个更好的服务器…而不是一个选项。请帮助。

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

首先,我使用collection
groupBy()
方法对我的集合进行分组,这样我就有了一堆id为键的子数组。当我循环遍历这些子数组时,我只是抓住了该子数组,而不是使用集合的
过滤器()
方法,处理这么多项目时速度非常慢。这为我节省了大量处理能力

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

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


希望这有帮助。

您正在生成什么类型的报告?是HTML页面、电子邮件、Excel表格还是其他类型的文档?我正在使用wkhtmltopdf。您确定CPU是否已耗尽或内存不足吗?这是一个时间敏感的操作吗?报告生成是否可以推送到队列并推迟到以后?@CanCelik it Is definitel把CPU打开。