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

请注意,在应用程序失败之前导入不同的行数不同的实例。

问题

我知道我们可以使用下面的两种解决:

  1. 改变php.ini建议here
  2. public/index开头添加ini_set('max_execution_time', 300);的建议here

一这可能有多种原因nd我更多有兴趣知道它到底在哪里用完Laravel没有提供比上述更多的细节。如果有人能够提供调试方法,我会非常感激。有帮助的事情:

  • 是一个方法的所有请求的时间聚合?
  • 内存过载是否会造成这种情况?
  • 它可以通过分块处理数据并通过多重请求处理它吗?

环境

  • Laravel 5.3
  • Centos 7vagrant
  • MySQL
+0

'是一个方法的所有请求的时间聚合?'这是一个请求,我会建议一些排队解决方案的长期运行计算,如任何基于AMQP的计算。 –

这不是跑出来的时间特定的操作。这是......从开始到结束的所有事情。

max_execution_timeinteger

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?

在这种情况下,是的,对于使用较小的批处理(通常来说)应该减少运行时间可能有意义。一切都是一种折衷,因为就工作单元的工作时间而言,大批量可能会或可能不会更有效,这是工作负载特定且很少线性的。