Laravel 5.3:
问题
我使用Laravel 5.3
导入一个巨大的(约>1 million rows
和>25 columns
)制表符分隔的文件是什么造成了“30秒超过最长执行时间”到使用功能的控制器代码mysql
数据库(我禁止在此发布所有代码)。在处理我与下面的错误中遇到的文件:Laravel 5.3:
FatalErrorException in Connection.php line 720:
Maximum execution time of 30 seconds exceeded
请注意,在应用程序失败之前导入不同的行数不同的实例。
问题
我知道我们可以使用下面的两种解决:
一这可能有多种原因nd我更多有兴趣知道它到底在哪里用完。 Laravel
没有提供比上述更多的细节。如果有人能够提供调试方法,我会非常感激。有帮助的事情:
- 是一个方法的所有请求的时间聚合?
- 内存过载是否会造成这种情况?
- 它可以通过分块处理数据并通过多重请求处理它吗?
环境
Laravel 5.3
-
Centos 7
上vagrant
MySQL
这不是跑出来的时间特定的操作。这是......从开始到结束的所有事情。
max_execution_time
integer
This sets the maximum time in seconds a script is allowed to run before it is terminated by the parser. This helps prevent poorly written scripts from tying up the server. The default setting is 30.
http://php.net/manual/en/info.configuration.php#ini.max-execution-time
的想法,在这里,是一个Web服务,一般来说,只有在一定量的时间从请求的响应是合理的。很明显,如果需要30秒(“合理性”的任意数字)来向Web浏览器或API返回响应,则可能无法按预期工作。大量请求占用服务器资源会导致服务器对任何后续请求无响应,导致整个站点停止运行。
max_execution_time
参数是一种保护性控件,用于在脚本(例如)陷入无限循环或以不合理的时间运行时缓解站点的降级。脚本执行被终止,释放被消耗的资源,通常是非生产性的。
Is the time aggregate of all requests by a method?
这是脚本中所有内容的总运行时间 - 而不是一个特定的操作。
Does memory overload cause this?
不典型,但也许当系统限制的内存,并使用一个交换文件,因为交换颠簸可以消耗大量时间。
Will it help by chunking the data and handling it through multiple request?
在这种情况下,是的,对于使用较小的批处理(通常来说)应该减少运行时间可能有意义。一切都是一种折衷,因为就工作单元的工作时间而言,大批量可能会或可能不会更有效,这是工作负载特定且很少线性的。
'是一个方法的所有请求的时间聚合?'这是一个请求,我会建议一些排队解决方案的长期运行计算,如任何基于AMQP的计算。 –