Hallo!
Seit einigen Tagen habe ich das Problem, dass bei der Ausführung meines recht komplexen PHP-Scripts innerhalb von einigen Stunden der gesamte Arbeitsspeicher gefüllt wird. Das Problem ist neu, ich weiß allerdings nicht, woher es kommt, da ich keine nennenswerte Änderungen am Script vorgenommen habe.
Das kuriose hierbei ist: In der Prozessliste wird PHP konstant mit 2,3% Speicherauslastung aufgelistet! Es wird auch kein Prozess aufgelistet, der mehr verbrauchen würde, als PHP...
Ich bin ratlos, da ich zu diesem Problem bisher keine Lösung finden konnte.
Wenn ihr weitere Infos benötigt, bitte einfach fragen!
OS: Ubuntu Server 11.04
PHP: die aktuelle PHP5
Ich verwende keinerlei Objekte, Klassen und Datenbanken sondern nur Funktionen, die 1- und 2 dimensionale Arrays übergeben, berechnen und in Dateien abspeichern.
Wenn ihr mir helfen könntet, den Fehler zu lokalisieren oder grundsätzlich den Verursacher zu finden, wäre ich euch sehr dankbar. Was mich verwundert ist eben, dass laut der Prozessliste PHP nur 23 MB verbraucht, aber dennoch der freie Gesamtspeicher stetig abnimmt.
//Das Problem habe ich auf allen Rechnern mit gleicher Konfiguration (Ubuntu + PHP5).
///Nach dem Beenden des Scripts erhöht sich der freie Speicher nur um 20-30 MB, die PHP ja auch laut Prozessliste offiziell verbraucht.
Programmieren - alles kontrollieren 4.937 Themen, 20.662 Beiträge
wird um so mehr Cache von Linux benutzt, je mehr Dateien ich schreibe?
Jein. Das passiert (normalerweise) nur so lange noch RAM frei und nicht von Anwendungen benötigt wird.
Ich fand das anfangs praktisch, da ich so leicher Dateninhalte lesen konnte, aber das Script schreibt mittlerweile einfach zu viele Dateien.
Häh?
Wie viele Dateien schreibt Dein Script denn? Wie viele Dateien werden gleichzeitig geschrieben, bzw. wie viele Datei-Ressourcen sind zeitgleich geöffnet? Werden die auch alle wieder geschlossen? Ggf. mal mit lsof während des Script-Ausführung prüfen auf welche Dateien gerade zugegriffen wird...
Nehmen wir an, ich würde auf. MySQL umsteigen und alles in eine Tabelle schreiben. Könnte das mein Problem lösen?
Also bei normaler Verwendung von Dateien sollte es auch keine Probleme geben. Wenn Du viele identisch strukturierte Datensätze vorhalten willst dann ist eine Datenbank im Zweifelsfall aber sicher besser geeignet...
Gruß
Borlander
Jein. Das passiert (normalerweise) nur so lange noch RAM frei und nicht von Anwendungen benötigt wird.
Ich fand das anfangs praktisch, da ich so leicher Dateninhalte lesen konnte, aber das Script schreibt mittlerweile einfach zu viele Dateien.
Häh?
Wie viele Dateien schreibt Dein Script denn? Wie viele Dateien werden gleichzeitig geschrieben, bzw. wie viele Datei-Ressourcen sind zeitgleich geöffnet? Werden die auch alle wieder geschlossen? Ggf. mal mit lsof während des Script-Ausführung prüfen auf welche Dateien gerade zugegriffen wird...
Nehmen wir an, ich würde auf. MySQL umsteigen und alles in eine Tabelle schreiben. Könnte das mein Problem lösen?
Also bei normaler Verwendung von Dateien sollte es auch keine Probleme geben. Wenn Du viele identisch strukturierte Datensätze vorhalten willst dann ist eine Datenbank im Zweifelsfall aber sicher besser geeignet...
Gruß
Borlander