Segfault - ich werd' noch kirre

  • Sagt mal, hat einer eine Ahnung woher oder wie so ein Segfault (Segmentation Fault) entsteht?

    Aktuell habe ich gerade das Problem, dass ich seit 12:36 Uhr bei einem Script immer einen Segfault bekommt. Das seltsame ist daran, dass das Script bisher immer funktioniert hat und das wird minütlich genutzt.

    Geändert wurde an dem Script rein gar nichts - null, nichts. Ich bin nun nur schon so weit, dass ich einen möglichen Fehler gefunden habe, aber das kann ja eigentlich nicht sein...

    Am Ende des Scriptes habe ich das hier stehen:

    Code
    header ('HTTP/1.1 301 Moved Permanently');
    header ('Location: /index.php?mod=bildergalerie');


    Entferne ich das, dann ist der Segfault auch weg. Nehme ich es wieder rein, ist der Fehler sofort wieder da.

    Seltsam auch, das Script habe ich nochmals. Identisch. Es schreibt die Bilder nur auf einen anderen Serverpfad. Das zweite Script funktioniert aber sowohl mit als auch ohne Weiterleitung.

    Die üblichen Kandidaten wie Eaccelerator, APC, GC habe ich schon ausgeschlossen. Egal ob an oder aus, der Fehler bleibt bestehen.

    Hat einer eine Idee was das sein kann?

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Zitat

    guck mal in die logs
    watt steht denne da?


    Witzbold ;)

    Was da steht?
    das da:

    Und zwar im allgemeinen Apache error.log. In den anderen Logs, auch denen für den speziellen Host steht dazu gar nichts drinnen.

    Ich möchte auch noch anmerken. Das Script erfüllt seinen Zweck. Die Bilder werden hochgeladen, bearbeitet, verkleinert und umbenannt. Die SSH2-Verbindung zum externen Server wird aufgebaut, die Bilder werden übertragen. Die Verbindung wird normal geschlossen. Daten werden in die Datenbank eingetragen. Alles funktioniert. Nur dann kommt der Fehler und der Browser meldet auch, dass der Server die Verbindung zurückgesetzt hat. Gleichzeitig dann der Segfault im Log.

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • So, debug war aktiviert und mehr sehe ich dennoch nicht, extra zwei mal versucht.

    Code
    [Tue Jun 26 14:28:23 2012] [notice] Graceful restart requested, doing restart
    [Tue Jun 26 14:28:23 2012] [notice] Apache/2.2.16 (Debian) configured -- resuming normal operations
    [Tue Jun 26 14:28:23 2012] [info] Server built: Apr  1 2012 06:40:08
    [Tue Jun 26 14:28:23 2012] [debug] prefork.c(1013): AcceptMutex: sysvsem (default: sysvsem)
    [Tue Jun 26 14:28:34 2012] [notice] child pid 13723 exit signal Segmentation fault (11)
    [Tue Jun 26 14:28:44 2012] [notice] child pid 13734 exit signal Segmentation fault (11)

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • hmm gleiche script auf gleichem server?
    und da geht es?

    wie ist denn der memory bestückt guck mal in top oder installiere htop
    aptitude install htop und schau mal ob der am limit ist, vielleicht bracuh der ja mehr für ne umleitung, ka
    hört sich für mich nicht schlüssig an aber probiere mal

    wenn etwas möglich erscheint mach ich das, wenn das nicht klappt gehts ans unmögliche und ansonsten das undenkbare.

    - nun stolz rauchfrei - Ich denke also Bing ich!

    Support 24h Bereitschaft 0173 6107465 - NUR Für Kunden von SEO NW!

  • Ja, gleiche Script, gleicher Server, gleicher Host. Ist bei mir im Kundenbereich. Die beiden Scripte laden Bilder hoch und unterscheiden sich nur im Zielpfad. Der Zielserver ist auch identisch.

    Speicherverbrauch vom Script.
    0,48 MB am Ende
    0,56 MB Peak

    Server:
    Aktuelle Nutzung: 422.620k
    Total: 4.194.304k

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • hmm,
    wenn du mal hilfe brauchst kann dir keiner helfen.

    ich hätte, hättest du nicht geschrieben dsa wenn das das 301 wohl der fehler sein würde geschrieben, dsa du da irgendwo einen anderen fehler hast zB mit arrays pointer, oder irgendwas wo es einen fehler mit dem speicher geben kann.

    Da das sript woanders wunderbar läuft und kein Speicherproblem da ist..
    Hmm hast du irgendwas anderes inkludiert?
    Da muss es doch was geben , was einen konflikt auslöst und was etwas evtl mit dem 301 zu schaffen hat..
    Zb was inkludiert, was auch etwas mit einem 301 oä zu tuen hat, zB inkludierte hauptseite die was anderes sagt. oder sowas
    oder irgendwas was darauf zugreift

    da wirste sicherlich auch schon gedacht habenaber ich sags nochmal

    schade das ich dir nicht helfen konnte

    wenn etwas möglich erscheint mach ich das, wenn das nicht klappt gehts ans unmögliche und ansonsten das undenkbare.

    - nun stolz rauchfrei - Ich denke also Bing ich!

    Support 24h Bereitschaft 0173 6107465 - NUR Für Kunden von SEO NW!

  • Nee, das ist nichts. Gut, inkludiert schon, aber das ist nichts, was es nur da gibt.

    Inkludiert wird eine ini.php, die halt Config, MySQLi-Class (eigene), DB-Connect und eine Userprüfung (für den Login) lädt. Alles gibt es auf jeder Seite bei mir.
    Inkludiert wird auch eine eigene SSH2-Class, aber die wird auch an ca. 8 Stellen verwendet (auch im zweiten identischen Script).

    So, mehr Includes gibt es da eigentlich nicht. Dann eben noch die Image-Funktionen zur Bilderstellung / Bearbeitung. Normalen PHP-Code zur Formulardatenprüfung und eben Code zur Übertragung auf den File-Server.

    Das alles läuft ja auch korrekt durch. Die Bilder werden bearbeitet, neu erstellt und übertragen. Keine Abbrüche, Scriptfehler oder andere Ungereimtheiten. Danach kommt dann als letztes der HEADER 301 um zurück zur Übersicht zu kommen und das tut er nicht mehr. Ohne Header kommt halt nix, da das Script selbst gar keine Ausgabe hat und auch nicht haben soll.

    Mein eigenes Debug-Log:

    So, [60] müsste nun der 301 sein.... Aber dahin kommt er nicht mehr.

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Hmm,
    also Hardware Fehler kann man ja auch ausschliessen, da es an der Stelle immer hakt.
    Was kann des denn noch sein?
    Meistens ist es ja die einfachste Sache. Wir wissen bei Header mault er. Warum? Das sagt uns das Log nicht. Also muss es aber an der Stelle ein Problem geben. Kannst du mal ein 302 machen ( Moved temporaly)
    .

    Aber daran kanns eigentlich logisch auch nicht liegen. Aber muss es irgendwie,
    denn das teil raus, läufts durch, bei andern gehts.
    Sind die beiden Scripts auf dem gleichen Server? Gleiche Domain?


    ahhh jetzt hab ich evtl ne idee...

    irgendwas mit rechten?
    Pfad net erlaubt, php da irgendwie beschränkt..


    Das teste mal indem du einen andern Pfad nimmst zum testen, aber genau das PHP schnipsel benutzt

    Wenns geht muss es daran liegen, also irgendwelchen rechten.
    copiere den pfad aber nicht stur, lad das am besten per ftp hoch, also keine fehler übernehmen

    du hast doch shell zugriff oder?

    wenn etwas möglich erscheint mach ich das, wenn das nicht klappt gehts ans unmögliche und ansonsten das undenkbare.

    - nun stolz rauchfrei - Ich denke also Bing ich!

    Support 24h Bereitschaft 0173 6107465 - NUR Für Kunden von SEO NW!

  • Zitat

    Kannst du mal ein 302 machen ( Moved temporaly)


    Hab ich schon. Auch schon HTTP 1.0 und 1.1. Auch schon nur "Location" und nur "302" bzw. "301". Ist das gleiche. Sobald ein Header kommt ist es vorbei.

    Zitat

    Sind die beiden Scripts auf dem gleichen Server? Gleiche Domain?


    Ja, alles identisch. Gleicher Server, gleiche Domain, gleicher vHost, gleiches Verzeichnis (Kundenbereich).

    Zitat

    Das teste mal indem du einen andern Pfad nimmst zum testen, aber genau das PHP schnipsel benutzt

    Wenns geht muss es daran liegen, also irgendwelchen rechten.
    copiere den pfad aber nicht stur, lad das am besten per ftp hoch, also keine fehler übernehmen

    du hast doch shell zugriff oder?


    Wie meinste das? Welchen Pfad wechseln? Den Zielpfad auf dem File-Server kann ich nicht ändern, das wäre fatal. Das Script kann ich wo anders hin kopieren, muss aber im Kundenbereich bleiben.
    SSH hab ich :)

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Hm, also jetzt hab ich noch was versucht.... Hab die Weiterleitung wieder drinnen und es geht. Danach steht noch was, aber das habe ich weg gelassen, weil das ja noch unwahrscheinlicher ist...

    Genau hört das Script so auf:

    Code
    _log_debug('Galerie UK '.$_SESSION['uk_id'].': debug_msg: '.$debug_msg);
    
    
    // Weiterleitung um F5 zu verhindern
    header ('HTTP/1.1 301 Moved Permanently');
    header ('Location: /index.php?mod=bildergalerie');
    exit;
    ?>

    Mit Weiterleitung und ohne "exit" kommt der Fehler nicht! Aber wie gesagt, in dem anderen Script ist das Exit auch und es war auch schon immer da drinnen ...

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Das past irgendwie nicht zusammen. Mysteriös

    Haste es schonmal mit Geisterbeschwörung versucht?
    Das ist evtl was,
    ich bin leider raus
    Hmm
    Beide Scripte arbeiten im selben Verzeichnis? Ich mein nicht wo die liegen, ich meine wo die halt reingehen?
    Sorry bin mit meinem Latein am Ende

    wenn etwas möglich erscheint mach ich das, wenn das nicht klappt gehts ans unmögliche und ansonsten das undenkbare.

    - nun stolz rauchfrei - Ich denke also Bing ich!

    Support 24h Bereitschaft 0173 6107465 - NUR Für Kunden von SEO NW!

  • Ja, das geht es Dir wie mir, ich weiß auch nicht mehr weiter. Ja, die haben alle das gleiche Arbeitsverzeichnis.

    Hab mit nun auch eben 4 Core-Dumps erstellen lassen. Jetzt muss das doofe gdb installiert werden, das mach ich jetzt aber nicht mehr. Ist halt ein Produktiv-Server und da kann ich nicht so wie ich will :(

    Und ich liebe Google hier auch wieder mal. Such mal nach Segfault header oder exit... Da kommt jeder Mist, aber nichts was man sucht.

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Also ich glaub der will mich verarschen. So, ein ganz anderes Script, sehr einfach:

    So, was passiert, wenn man test-1.php aufruft? Richtig, er sollte an test-1.php?loc=1 weiterleiten. Doch das macht er auch nicht. Keine Weiterleitung.

    So, etwas genauer:

    Ruft man das auf, dann erhält man als Ausgabe:
    - 1 - - 2 -

    Verfluchter Mist. Nach - 1 - kommt die Weiterleitung. - 2 - darf der doch gar nicht anzeigen. Aber ein Segfault kommt nun zumindest nicht...

    Mist, bin echt schon kirre. Kann ja gar nicht gehen. Ist ja ein Echo vor dem Header...

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Also ich gebe jetzt auf. Ich weiß nicht weiter und das Telefon klingelt schon die ganze Zeit - können nur die Kunden sein.

    Jetzt kommt der Fehler jedenfalls immer, egal ob mit oder header, mit oder ohne exit - egal, immer ein Segfault.

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Hab das Ding schon 20x neu gestartet ;)
    Nun habe ich mich etwas nach oben gearbeitet. Also oberhalb vom exit und header...

    Und auch da bekomme ich einen Segfault... Und als Code habe ich da nur:

    Code
    function punktefunktion ($value)
    {
    	return 0;
    }
    
    
    $rangpunkte = punktefunktion($_SESSION['uk_id']);


    Ich rufe also nur eine Funktion auf, die 0 zurück gibt -> Segfault.
    Rufe ich die Funktion nicht auf, dann gibt es keinen. (Header darf ich aber dennoch nicht senden)

    Benenne ich die um, nutze ich Referenzen oder übergebe ich direkt feste Werte an die Funktion, returne ich andere Werte etc. ändert sich nichts. Der Fehler besteht, sobald ich die aufrufe.

    Aber... Gliedere ich die aus in ein anderes Script und rufe das dann auf, dann kommt wieder kein Fehler.

    PHP
    <?php
    function punktefunktion ($value)
    {
    	return 0;
    }
    $uk_id = 486;
    $rangpunkte = punktefunktion($uk_id);
    ?>


    Also an der Funktion selbst liegt es auch nicht. Passiert halt nur in dem Bilderscript.

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • So, noch weiter hoch gearbeitet, aber das überhaupt was bringt weiß ich nicht - ich verstehe es nämlich nicht. Das Script lief nun 4 Jahre Fehlerfrei. Weiter oben habe ich die sftp Funktionen um die Verzeichnisse anzulegen bzw. zu prüfen, ob die schon da sind. Da müssen 5 angelegt / geprüft werden. Hier kommt schon der Segfault, wenn ich alle 5 bearbeiten lasse.

    Code
    if(!$sftp->sftp_mkdir($pfad_img_original, 0755, true))


    Gebe ich da nur ein Verzeichnis an, dann kommt kein Fehler. Bei zwei mkdir ist er wieder da. Aber das alles funktioniert ja eigentlich. Verzeichnisse werden angelegt und Bilder übertragen.

    So und der Test mit einem einzigen mkdir und der aktivierten Funktion von weiter unten.
    -> kein Fehler.

    Also
    1 mkdir und aktive Funktion geht.
    2 oder mehr mkdir und inaktive Funktion auch.

    Header dürfen aber bei beiden Versionen nicht gesendet werden.

    Das ergibt doch alles keinen Sinn....

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(