2017-06-17 5 views
0

Das Problem

ich Laravel 5.3 bin mit verursacht eine riesige zu importieren (etwa >1 million rows und >25 columns) Tabulatoren getrennte Datei in mysql Datenbankfunktionen in Controller-Code verwenden (Ich beschränke mich darauf, den ganzen Code hier zu posten). Während die Verarbeitung von Dateien ich mit dem folgenden Fehler aufgetreten bin:Laravel 5.3: Was maximale Ausführungszeit von 30 Sekunden überschritten '

FatalErrorException in Connection.php line 720:

Maximum execution time of 30 seconds exceeded

Bitte beachten Sie, dass die Anwendung, bevor ein Fehler eine unterschiedliche Anzahl von Zeilen für verschiedene Instanzen importiert.

Frage

ich, dass wir wissen, kann dieses Problem beheben entweder von folgenden mit:

  1. Ändern php.inihere vorgeschlagen
  2. Zugabe ini_set('max_execution_time', 300); zu Beginn des public/index als here vorgeschlagen

A eine Vielzahl von Gründen könnte dahinter stehen a Und ich bin mehr interessiert zu wissen, wo genau es aus der Zeit läuft. Laravel bietet keine weiteren Details als die oben genannten. Ich würde es sehr schätzen, wenn jemand Möglichkeiten bieten könnte, dies zu debuggen. Dinge, die helfen würden:

  • Ist die Zeit Aggregat aller Anfragen von einer Methode?
  • Führt Speicherüberlastung dazu?
  • Wird es helfen, die Daten zu chunken und sie durch mehrere Anfragen zu behandeln?

Umwelt

  • Laravel 5.3
  • Centos 7 auf vagrant
  • MySQL
+0

'Ist das Zeitaggregat aller Anfragen durch eine Methode?' Es ist eine Anfrage, ich würde vorschlagen, einige Warteschlangenlösung für lang laufende Berechnungen wie alles AMQP-basierte. –

Antwort

1

Es ist nicht eine bestimmte Operation läuft die Zeit davon. Es ist ... alles, kombiniert, von Anfang bis Ende.

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

Die Idee, hier ist, dass für einen Web-Service, allgemein gesprochen, nur eine gewisse Zeit von Anfrage-Antwort angemessen ist. Offensichtlich, wenn es 30 Sekunden dauert (eine willkürliche Zahl für "Angemessenheit"), um eine Antwort an einen Webbrowser oder von einer API zurückzugeben, funktioniert etwas wahrscheinlich nicht wie beabsichtigt. Viele Anforderungen, die Serverressourcen binden, führen dazu, dass ein Server auf nachfolgende Anforderungen nicht mehr reagiert und die gesamte Site ausfällt.

Der Parameter max_execution_time ist ein Schutzelement, das die Beeinträchtigung einer Site mildert, wenn beispielsweise ein Skript in einer Endlosschleife steckenbleibt oder anderweitig für unangemessene Zeit läuft. Die Ausführung des Skripts wird beendet, wodurch Ressourcen freigegeben werden, die normalerweise unproduktiv verbraucht werden.

Es ist die gesamte Laufzeit für alles im Skript - nicht eine bestimmte Operation.

Does memory overload cause this?

Nicht typisch, außer vielleicht, wenn das System für Speicher beschränkt ist und verwendet eine Auslagerungsdatei, da Swap Dreschen viel Zeit in Anspruch nehmen kann.

Will it help by chunking the data and handling it through multiple request?

In diesem Fall ja, kann es sinnvoll sein, mit kleineren Chargen zu arbeiten, die (im Allgemeinen) sollte die Laufzeit reduzieren. Alles ist ein Kompromiss, da größere Chargen in Bezug auf die Verarbeitungszeit pro Arbeitseinheit effizienter sein können oder auch nicht, was arbeitslastspezifisch und selten linear ist.

Verwandte Themen