über 'exec' gestartetes PRG hängt sich in zufälligen Abständen auf

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

  • über 'exec' gestartetes PRG hängt sich in zufälligen Abständen auf

    Hallo zusammen,

    ich bin neu hier im Forum und habe folgendes Problem:

    Im Rahmen einer Webanwendung wird mit Hilfe des exec Befehls aus PHP heraus ein Programm gestartet, das komplexe Berechnungen durchführt. Zu ca. 80% funktioniert alles perfekt. Php startet mein Programm, das Programm wird abgearbeitet, das PHP-Script nimmt den Programmfluss wieder auf...

    Gelegentlich passiert aber folgendes:

    Die exe-Datei (test.exe) gibt die Programmsteuerung nicht an php zurück. Im Taskmanager hängt der Prozess (test.exe) und verschwindet nicht mehr. (gelegentlich heißt er seltsamerweise auch test.ex , das e bei 'exe' fehlt dann). Das Php-script wird nicht weiter ausgeführt, weil es ja auf die Abarbeitung der exe wartet. Die Exe (in C geschrieben) wiederum berechnet auch im Fehlerfall alles korrekt, da die letzte Zeile vor der return Anweisung im exe Programm korrekt ausgeführt wird (schreibt einen Wert in eine Datei, der Wert ist auch dann wenn die exe "hängt" korrekt).

    Ist der Fehler einmal aufgetreten, so hängen sich auch alle weiteren
    Requests auf. Der Webserver muss restartet werden, bevor die Exe bei folgenden Requests wieder korrekt abgearbeitet werden kann.

    Wenn ich die Exe nicht aus php heraus starte, sondern auf der
    Windows-Kommandozeile, dann wurde bis jetzt noch kein Absturz beobachtet, auch bei mehrfacher Ausführung nicht.

    Die Exe habe ich mit einem Memory-Checker auf Speicherfehler überprüft und keine gefunden.

    Ich habe den Eindruck, dass der Absturz besonders oder nur dann auftritt, wenn gleichzeitige Requests an den Webserver stattfinden, folglich wird die exe gleichzeitig ausgeführt. Dies wiederum sollte aber kein Problem sein, da PHP jede Instanz der Exe in einem eigenen Prozess startet?

    Auf folgender Konfiguration läuft das ganze:

    Windows Server 2003
    Apache 2.0.59
    Php 5.1.6

    vielen Dank für eure Ideen
    Michael

  • #2
    hm ... solche Fehler ist bei solch einem Konstrukt immer vorprogrammiert. Warum muss du von PHP aus eine exe starten und sogar mehr als einmal? Wenn du den vollen Zugriff auf dem Server hast, vielleicht sollst du über den Einsatz von COM-Komponente nachdenken und von PHP aus darauf zugreifen, das ist viel stabiler und sicherer. Auf jeden Fall hast du im PHP die volle Fehlerbehandlungsmöglichkeit

    Kommentar


    • #3
      Das Problem ist, dass die Exe über Jahre hinweg enstanden ist (da haben auch andere Leute dran rumprogrammiert) und auch recht komplex ist. Da was neues zu machen ist einfach zu aufwendig.

      Von einem php script wird die exe nur einmal aufgerufen, aber wenn mehrere Requests gleichzeitig stattfinden, kann das script natürlich parallel abgearbeitet werden und somit der Aufruf auch gleichzeitig erfolgen.

      Mein Problem ist, dass ich auch nicht weiß woran es liegt. Liegt es an php, an dem exec-aufruf? Oder ist ein Fehler in der Exe, dass da doch noch irgendwo Speicher überschrieben wird... oder ist es ganz was anderes. Und ich weiß momentan nicht mehr so recht, wie ich die Ursache eingrenzen könnte ...

      Kommentar


      • #4
        kann das script natürlich parallel abgearbeitet werden und somit der Aufruf auch gleichzeitig erfolgen.
        Das könntest du doch mit einer Lockdatei verriegeln..oder nicht?
        Wir werden alle sterben

        Kommentar


        • #5
          Original geschrieben von Myxlyxl
          Von einem php script wird die exe nur einmal aufgerufen, aber wenn mehrere Requests gleichzeitig stattfinden, kann das script natürlich parallel abgearbeitet werden und somit der Aufruf auch gleichzeitig erfolgen.
          das ist klar.
          Original geschrieben von Myxlyxl
          Mein Problem ist, dass ich auch nicht weiß woran es liegt. Liegt es an php, an dem exec-aufruf? Oder ist ein Fehler in der Exe, dass da doch noch irgendwo Speicher überschrieben wird... oder ist es ganz was anderes. Und ich weiß momentan nicht mehr so recht, wie ich die Ursache eingrenzen könnte ...
          ich vermute, dass durch mehrmaligen Aufruf, die Anwendung sich selbst in die Quere kommt und somit sich einfriert, z.B. durch unsauberer DB-Zugriff, nicht freigegebene Resource nach Gebrauch, nicht geschlossenen DB-Connection im Fehlerfall, ... und und und ... ausserdem bleibt noch die Frage, ob du genug Speicher und Systemresource auf dem Web-Server hast für solche Aufrufe.; ich meine bei einer gut besuchten Website oder bei einem Intranet in einer mittelständischen Firma ist das ohne tödlich für jeden Server, das ist nie was genug, vor allem wenn Betriebsystem Windows heisst

          Kommentar


          • #6
            Hallo,

            wollte nur kurz anmerken, dass ich das Problem gelöst haben. Es lag an php in Zusammenspiel mit dem exec Befehl. Aus mir nicht erklärlichen Gründen muss ich vor dem exec-Aufruf die Funktion session_write_close(); aufrufen, dann gibts keine Probleme mehr.
            Zuletzt geändert von Myxlyxl; 09.01.2007, 10:29.

            Kommentar


            • #7
              Hallo,
              ich bin neu hier und auch wenn dieser Beitrag schon alt ist, hat die Funktion session_write_close(); das Problem dauerhauft gelöst? Ich habe ein sehr ähnliches Problem. hin und wieder bleibt der Prozess, welchen ich über exec() starte, hängen. und dann gehen natürlich alle weiteren versuchen ebenfalls in die hose...

              Gruß
              freggel

              Kommentar

              Lädt...
              X