php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.01.2012, 13:39  
Neuer Benutzer
 
Benutzerbild von Nepstar
 
Registriert seit: 13.03.2010
Beiträge: 9
PHP-Kenntnisse:
Fortgeschritten
Nepstar befindet sich auf einem aufstrebenden Ast
Standard Segmentation Fault / Memory Allocation

Hallo Community

Seit über einer Woche versuche ich einen Fehler zu beheben, dessen Ursache ungefähr klar ist, jedoch keine Lösung sichtbar.

Es geht um ein Script, welches mittels HTTP_Request2 (PEAR) div. Seiten crawlt und bestimmte Informationen für Statistiken abspeichern soll.

Zum Einen gibt es das Problem, dass beim Zeitpunkt X nach ausführen des Scripts zu wenig Arbeitsspeicher vorhanden ist (Memory cannot be allocated usw.).
Beim Testdurchlauf auf einer Maschine mit mehr Arbeitsspeicher erhalten wir einen "Segmentation Fault", welcher u. A. durch das Linux-Tool "memcpy" entsteht.
Nach verschiedensten Recherchen über die Fehlermeldung handelt es sich angeblich um einen PHP-internen Bug (?).

Zu Testzwecken wurden verschiedene PHP-Versionen installiert (auf der Maschine mit genügend Arbeitsspeicher) und folgende Resultate erzielt:

PHP 5.3.8:
SQL-Fehler, falsch generiertes Statement. Genauer gesagt: ein aus der Datenbank ausgelesener Integer (!) wird plötzlich ohne irgendwelchen Sinn als String in das Statement geschrieben. Bei diesem String handelt es sich um eine zuvor verwendete Variable für das selbe Statement in der WHERE-Bedingung.
Beispiel: "UPDATE produkt SET ID = 3 WHERE Name = 'Maschine' AND ID = 'Name = 'Maschine'';" - die derzeitige Erklärung ist ein Memory Leak. Jedoch weshalb?

PHP 5.2.10:
PHP Fatal error: Out of memory (allocated 8965324 (tried to allocate 18446744072553347769 bytes) in [...].
Hier handelt es sich um einen enormen Speicher, welcher zugewiesen werden will. Unmöglich!

PHP 5.1.6:
Speicherzugriffsfehler
Ja, sehr viel Information...

Wenn das Script mittels GDB-Debugging ausgeführt wird, erscheint als Resultat wie oben erwähnt ein "Segmentation Fault".

WIr verwenden PHP allesamt schon mehrere Jahre und haben gute bis sehr gute Kenntnisse in der Programmierung, auch was MySQL etc. angeht. Jedoch sind wir hier auf ein Problem gestossen, welches uns komplett blockiert.

Für Hinweise, Gedankenstösse oder sogar Lösungsvorschläge wären wir Euch deshalb sehr dankbar!

Beste Grüsse,
Nepstar
Nepstar ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 14.01.2012, 14:13  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

- womit generierst du die Queries
- womit verbindest du zur Datenbank
- Warum PEARed Tools nutzen wenn du native Libraries nutzen kannst ( curl )

Segment Faults sind Schutzverletzungen die Aufgrund vieler Faktoren entstehen können. Memory Overflows könnten durch ebendsoviele Faktoren aber meist durch kontinuierliche Rekursion verursacht werden.

Um gewisse Dinge logisch erklären oder analysieren zu können solltest du ( sofern dir das lizenztechnisch möglich ist ) zumindest schlüssige Quellcode-Bereiche posten.

Ins blaue Raten bringt bei segfaults oder memleaks relativ bis ca. garnix.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 14.01.2012, 15:38  
php.de
Gast
 
Beiträge: n/a
Standard

Soviel ich weiß, sind Segmentation Falts immer interne Bugs.
Solche Bugs musst du unbedingt bei den Programmierern melden.
Das ist keine angenehme Arbeit.
  Mit Zitat antworten
Alt 14.01.2012, 16:01  
hts
Erfahrener Benutzer
 
Registriert seit: 07.09.2010
Beiträge: 722
PHP-Kenntnisse:
Fortgeschritten
hts befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von php.de Beitrag anzeigen
Soviel ich weiß, sind Segmentation Falts immer interne Bugs.
Ich würde eher sagen, dass es sich dabei um Programmierfehler handelt. Endlosrekursion ist z.B. sehr beliebt
PHP-Code:
function rec()
{
  return 
rec();
}

rec(); 
Da kommt nicht mal ein 500er-Serverfehler zurück.

Code:
cat /var/log/apache2/error.log

[Sat Jan 14 15:58:12 2012] [notice] child pid 2049 exit signal Segmentation fault (11)
hts ist offline   Mit Zitat antworten
Alt 14.01.2012, 16:25  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Schutzverletzungen sind Parser-Fallouts deren Ursprung weder durch Überwachung noch durch Vorhersehung ( zu Erwartende Logik ) einkalkuliert wurden. Klar muss man die Melden, aber was ist wenn du einen Bug meldest die PHP in einen segfault zwingen aber ihren Ursprung in einem PECL-Modul haben und dessen Ursprung auf einer Tatsache beruht die bspw. wie Endlosrekursion garnicht abfangbar ist dessen Ursprung dennoch nötig ist um bestimmte Zustände im Parser überhaupt zu erreichen ( Endlosschleifen die ein Script dazu befähigen einen Port zu überwachen bis Zustand Y eintritt - Was voraussichtlich erst nach 100 Jahren passieren kann <übertreiben /> ).

Ich würde hier zuerst einmal prüfen wollen ob es an dem PECL-Zeug liegt, eh ich den PHP-Bugtracker um einen weiteren Bogus-Kandidaten erweitere.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 14.01.2012, 17:14  
php.de
Gast
 
Beiträge: n/a
Standard

Zitate aus der Zeitschrift PHPmagazin Ausgabe 1.12:
Zitat:
Vom PHP-Interpreter ausgelöste Segmentation Faults können nicht direkt von einem PHP-Skript stammen.
Zitat:
Ein Segmentation Fault wird daher immer von einer PHP Extension oder dem PHP Core in den unterliegenden C-Funktionen ausgelöst. PHP-Code kann also nicht eigenständig den Segmentation Fault erzeugen.
  Mit Zitat antworten
Alt 14.01.2012, 17:21  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Zitat:
Zitat von php.de Beitrag anzeigen
Zitate aus der Zeitschrift PHPmagazin Ausgabe 1.12:
PHP-Code:
function untrueQuotesFromMagazine() { 
   return 
untrueQuotesFromMagazine(); 

__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 14.01.2012, 17:23  
meikel
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von php.de Beitrag anzeigen
Zitate aus der Zeitschrift PHPmagazin Ausgabe 1.12:
Zitat:
Ein Segmentation Fault wird daher immer von einer PHP Extension oder dem PHP Core in den unterliegenden C-Funktionen ausgelöst. PHP-Code kann also nicht eigenständig den Segmentation Fault erzeugen.
Erzeugen nicht, aber verursachen. Simpel ausgedrückt: wenn die Extension fehlerfrei geladen werden konnte, gibt es zwei Möglichkeiten:
entweder die Extension schmiert ab, weil eine Funktion unsauber programmiert wurde (fehlerhafter Algorithmus)
oder die Extension schmiert ab, weil bei der Benutzung einer Funktion/einer Klasse zur Laufzeit Zustände auftreten, die nicht abgefangen werden (keine Fehlerbehandlung).
In beiden Fällen wurde die Extension schlampig konstruiert.
"Ampel? Gestern war hier auch grün."
  Mit Zitat antworten
Alt 14.01.2012, 17:28  
php.de
Gast
 
Beiträge: n/a
Standard

@tr0y
Willst du mit dem Script andeuten, dass ich diese Zitate frei erfunden habe?
  Mit Zitat antworten
Alt 14.01.2012, 17:30  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Zitat:
Zitat von meikel Beitrag anzeigen
Erzeugen nicht, aber verursachen. Simpel ausgedrückt: wenn die Extension fehlerfrei geladen werden konnte, gibt es zwei Möglichkeiten:
entweder die Extension schmiert ab, weil eine Funktion unsauber programmiert wurde
oder die Extension schmiert ab, weil bei der Benutzung einer Funktion/einer Klasse zur Laufzeit Zustände auftreten, die nicht abgefangen werden.
In beiden Fällen wurde die Extension schlampig konstruiert.
"Ampel? Gestern war hier auch grün."
"segfaults" sind keine unbekannten Fehler..

Jeder Bluescreen unter Windows ist ein segfault.

Edit: Um das zu spezifizieren: Der Bluescreen ist auf ebene des Betriebssystem nur eine Fehlerdarstellung, die allermeisten Fehler die das Betriebssystem in eine Bluescreen-Situation zwingen sind aber sogenannte Schutzverletzungen ( genauer Allgemeine Schutzverletzungen ) - zu englisch: segfaults oder auch general segfaults. Fehler die Bluescreens auslösen sind sogenannte stop errors. In PHP verstehen wir darunter die fatal error-Familie der Fehler und alle Fehler die über dem fatal error in der Fehler-Hirarchie stehen ( parser error, core error, ... )

Edit2: hmm, was würde PHP dazu treiben 18 Exabyte Arbeitsspeicher zu bestellen ? ^^

@PHP.de: Nein, nur das der erste Qoute nicht stimmt ( unwahr ist, untrue / false )
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.

Geändert von tr0y (14.01.2012 um 18:05 Uhr).
tr0y ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] file_get_contents erzeugt Out Of Memory Fehler aze PHP Einsteiger 18 11.07.2011 13:28
Storage Eninge MEMORY und text Cyron Datenbanken 13 15.05.2011 12:22
imagecreatefromjpeg() "Allowed memory size exhausted" peter silie PHP Tipps 2010 17 04.05.2011 14:25
Allowed Memory Size robydog PHP Tipps 2009 29 03.04.2010 18:22
Allowed Memory Size exhausted Exituz23 Server, Hosting und Workstations 4 01.02.2010 12:37
Segmentation fault dispy PHP-Fortgeschrittene 5 25.11.2009 08:57
Willkürlicher Segmentation Fault Shakademus PHP-Fortgeschrittene 10 10.10.2008 09:13
*** glibc detected *** double free or corruption (!prev): gunterrainer Server, Hosting und Workstations 3 18.05.2006 11:19
Fatal error: Allowed memory size of 8192 bytes exhausted at PHP Tipps 2005 11 06.03.2005 19:26
[Erledigt] Memory Problem mit gd PHP-Fortgeschrittene 1 25.06.2004 18:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php segmentation fault, segfault erzeugen beispiel, memory allocation, php memory segmentation fault, segfault memory, php speicherzugriffsfehler, segmentation fault php, php 5.1.6 \allowed memory size of\ \bytes exhausted\ segfault, linux memcpy segmentation fault, memory segfault, php free memory segmentation fault, file_get_contents segmentation fault, segfault segmentation wiki, php segmentation, segmentation fault

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:51 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum