time exceeded

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • time exceeded

    Hi,
    kurze Frage.
    Da unser Server manchmal etwas lahmt, dauert eine Abfrage sehr sehr lange und überschreitet die timeout grenze und es wird der fatal error angezeigt.

    Gibt es eine Möglichkeit, explizit dieser Fehlermeldung abzufangen und eine eigene Ausgabe zu machen?

    Danke

  • #2
    error_reporting()
    set_error_handler()
    register_shutdown_function()

    Kommentar


    • #3
      Original geschrieben von onemorenerd

      set_error_handler()

      Kommentar


      • #4
        Die folgenden Fehlertypen können nicht von einer benutzerdefinierten Funktion behandelt werden: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING und die meisten E_STRICT, die in der Datei ausgelöst werden, in der set_error_handler() aufgerufen wird.
        Bist du sicher, dass der errorhandler bzw. die shutdownfunction überhaupt aufgerufen wird?

        Kommentar


        • #5
          Original geschrieben von PHP-Desaster
          Bist du sicher, dass der errorhandler bzw. die shutdownfunction überhaupt aufgerufen wird?
          FatalError

          Kommentar


          • #6
            FatalError
            lol, heißt das jetzt nein? Also ein Fatal Error ist afaik ein E_ERROR, wird also laut Doku nicht zu fangen sein.

            Kommentar


            • #7
              Das Scheitern einer Abfrage erzeugt aber niemals alleine einen fatal-error, höchstens wenn man dann versucht darauf zuzugreifen. Und da kann man mit einer wrapper-Funktion um mysql_query herum ansetzen.
              set_error_handler ist idT nutzlos.

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                So wie ich phpMorpheus2 verstehe, läuft das Skript auf das max_execution_limit. Und das ist nicht mit diesen Mitteln abzufangen. Sollte ein anderer Timeout gemeint sein, korrigiert mich.

                Kommentar


                • #9
                  Die Fehlermeldung:
                  PHP-Code:
                  Fatal errorMaximum execution time of 30 seconds exceeded 
                  Die ini darf ich leider nicht temporär höher setzen, sodass der Server mehr Zeit hat.

                  Kommentar


                  • #10
                    Hab ich mir schon gedacht, dass es der Timeout vom PHP ist. Was für eine Abfrage machst du denn da? Wenn du nur 30 Sekunden zur Verfügung hast, musst du halt zusehen, dass dir diese reichen

                    Kommentar


                    • #11
                      Original geschrieben von PHP-Desaster
                      Hab ich mir schon gedacht, dass es der Timeout vom PHP ist. Was für eine Abfrage machst du denn da? Wenn du nur 30 Sekunden zur Verfügung hast, musst du halt zusehen, dass dir diese reichen

                      Der Server ist bei uns in der Firma nicht wirklich schnell und bei so vielen mitarbeitern die das meist Minutengenau gleichzeitig nutzen wird schonmal keine Antwort geschickt bzw. dauert sie zu lange.
                      Der Server arbeitet mit reichlich anderen Programmen und wird daher sehr lahm.
                      Bis dato haben wir keine Rechte einen der Hautrechner nutzen zu dürfen.
                      Fazit: Anpassen mit eigener Fehlermeldung
                      Grund: Mitarbeiter die keine Programmierer sind (gibt es hier ein haufen von) kriegen total schiss bei einer Fehlermeldung das sie was geschrottet hätten etc.
                      Die Emails dazu sind immer sehr Amüsant ^^

                      Kommentar


                      • #12
                        Du könntest Ticks nutzen, um zu schauen, wie viel Zeit du noch hast. Ticks sind aber zum einen relativ unzuverlässig in großen Abständen, in kleinen fressen sie enorm an Performance.
                        [FONT="Helvetica"]twitter.com/unset[/FONT]

                        Shitstorm Podcast – Wöchentliches Auskotzen

                        Kommentar


                        • #13
                          Denke auch, dass du deinen Algorithmus dann etwas umstricken musst, so dass du auf das timelimit reagieren kannst. Dazu reicht im Grunde auch schon ein ini_get('max_execution_time') und ein wenig time().

                          Kommentar


                          • #14
                            Ein error handler wird bei Überschreitung des Zeitlimits tatsächlich nicht aufgerufen, shutdown functions aber schon. Das kann man nutzen.
                            PHP-Code:
                            function timeout_message($t FALSE) {
                                if (!
                            $t) {
                                    
                            register_shutdown_function('timeout_message'time());
                                    
                            error_reporting(error_reporting() ^ E_ERROR);
                                } else {
                                    
                            $e error_get_last();
                                    if (
                            $e['type'] == E_ERROR) {
                                        if (
                            time() - $t >= ini_get('max_execution_time')) {
                                            
                            $e['message'] = 'Abgebrochen! Das hat zu lange gedauert.';
                                        }
                                        echo 
                            $e['message'] .' (' $e['file'] . ', ' $e['line'] . ')';
                                    }
                                }

                            Um es wirklich sauber und transparent zu machen, müßte diese Funktion noch Dinge wie display_errors, html_errors, xmlrpc_errors und zlib-Kompression berücksichtigen.

                            Eine wirklich schicke, benutzerfreundliche Fehlermeldung wird es aber erst, wenn man eine ganze Webseite ausgibt. Das geht mit output buffering, muss dann aber tiefer mit der eigentlichen Applikation verwoben werden.

                            Kommentar


                            • #15
                              Ein error handler wird bei Überschreitung des Zeitlimits tatsächlich nicht aufgerufen, shutdown functions aber schon.
                              Selbst das nach einem E_ERROR überhaupt noch etwas aufgerufen wird, finde ich interessant. Gut zu wissen. Was würde PHP denn veranstalten, wenn du in dieser Funktion einfach munter weiterarbeitest? ^^

                              Kommentar

                              Lädt...
                              X