![]() |
| | Themen-Optionen |
| | Nach oben #1 | |
| Blubb... öfz Registriert seit: 16.03.2006 Ort: Berlin
Beiträge: 419
|
Servus, bekommen immer folgende Fehlermeldung, die an sich keinen Sinn ergibt, sobald eine .jpg-Datei, die größer als 1,3 MB ist, hochgeladen wird. An und für sich meint er ja, dass er 8448 Bytes sammeln will, aber 18 MB überschritten wurden. Zitat:
PHP-Code: Ich meine: 18 MB cache für ein Script sind schon enorm, fast zu viel. Irgendwelche Ideen? Greets Ljungi
__________________ Vive la France! Welcome to Sarkoworld... | |
| | |
| | Nach oben #5 |
| Benjamin Steininger Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.177
|
es geht hier um 3 faktore: höhe, breite, farbtiefe und da sollte es unabhängig davon sein ob das bild ein GIF, ein PNG oder ein jpeg ist, aussnahmen stellen VIELEICHT, da bin ich mir aber nicht sicher, weil gdlib das ja intern eh alles sehr stark aufbläst, gifs dar, wenn sie nur 256 farben nutzen und 8bit-pngs
|
| | |
| | Nach oben #6 |
| Erfahrener Benutzer Registriert seit: 18.08.2005
Beiträge: 108
| Im Gegenteil, da JPEG im Gegensatz zu PNG und GIF keine verlustfreie Kompression ist, kann es bei gleicher Dateigrösse wesentlich höhere Auflösungen erreichen, die nach dem Entpacken dann natürlich bei PHP in den Speicher passen müssen.
|
| | |
| | Nach oben #7 | |
| Erfahrener Benutzer Registriert seit: 18.03.2005
Beiträge: 591
| Zitat:
Es ist praktisch ein Duplikat des geladenen Bildes. Da spielt auch weniger das Bildformat eine Rolle, sondern jedes einzelne Pixel mit seiner Farbtiefe. Bei einigen Grafikprogramm wird das als Info sogar angezeigt. (http://www.cix88.de/d/tut_gdlib.gif) Natürlich nur solange, wie sich die Bild-Daten im Speicher befinden. Erst wenn das Bild gespeichert wird, wird das Bildformat gewählt und entsprechend erfolgt die Komprimierung. Die GDlib macht es genauso, nur schlimmer Geändert von CIX88 (03.01.2007 um 07:28 Uhr). | |
| | |
| | Nach oben #8 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 684
|
Zu beachten ist wohl auch, dass jede Variable, jede geladene Klasse oder Funktion, sowie die PHP-Scripte selber den Speicher füllen. Jede Variable, die nicht wieder gelöscht wird, bleibt bis zum Ende des Scriptes bestehen. Ebenso auch Bilder, die geladen werden. Wenn man zwischendurch den Speicher also nicht mal wieder frei gibt, indem man nicht mehr benötigte Variablen löscht, kommt es auch bei großen Cache schnell zum Überlauf.
__________________ Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
| | |
| | Nach oben #9 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.642
|
Garbage-Collector hilft bei Java, bei PHP muss man selbst noch mitmachen richtig?
__________________ I did it my way - Senseless-Blog |
| | |
| | Nach oben #10 |
| Benjamin Steininger Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.177
|
hmm naja, also wenn ich ne funktion habe dann ist am Funktionsende das an variablen was nur intern genutzt wurde ja wieder wech und da man meist ja eh über funktion/klassen arbeitet kommt so nicht unbedingt so viel overhead zusammen oder? http://www.robo47.net/public/php/speicherverbrauch.php |
| | |
| | Nach oben #11 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 684
|
@Robo: Da wäre ich mir nicht so sicher, zum Beispiel bleiben fopen etc. bis zum Ende des Scriptes bestehen oder halt bis zum fclose. Ebenso meine ich ist es auch mit Graifken, egal, ob Funktion oder nicht, es sollte vor dem Ende einer jeden Funktion aufgeräumt werden, ist meiner Meinung nach sauberer. Für mich ist jedenfalls vorstellbar, dass die Variablen im Hintergrund gehalten werden, wenngleich sie auch nur intern in der Funktion benutzt wurden und erst beim erneuten Aufruf gelöscht werden, das ist aber nur eine Vermutung, die ich nicht belegen kann...
__________________ Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
| | |
| | Nach oben #12 | |
| Benjamin Steininger Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.177
| Zitat:
Also ohne fclose bleiben da reste übrigt. dann würde ja mein Script nach dem Funktionsaufruf trotzdem noch ca 1,4 MB belegt haben oder ? Also für Resourcen und andere Sachen kann das stimmen, aber ich denke für "normale" Variablen eher nicht. | |
| | |
| | Nach oben #13 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 684
|
Wie gesagt, belegen kann ich es nicht, aber vorstellbar wäre es in meinen Augen dennoch. Die Erklärung dafür ist auch garnicht mal soweit hergeholt finde ich: Wenn man erst beim Aufruf einer Funktion die Daten löscht, spart man sich am Ende einer Funktion die Schreibzeit im Speicher, um diesen wieder frei zu geben. Könnte also um ein µ schneller sein das Ganze. Wie gesagt: Nichts handfestes und wahrscheinlich wird es auch so nicht gehandhabt, aber vorstellbar bleibt es dennoch EDIT: Dein Test-Script zeigt ja schon, dass ich mit Resources nicht unbedingt unrecht hatte... Und ich meine, dass es auch mit Bildern so ist. Ich hatte mal ein Script zum Kleinrechnen von Bildern das unmengen an Speicher brauchte. Nach dem Einfügen der "Zerstörung" des Bildes (obwohl die selbe Variable immer überschrieben wurde und eigentlich der Speicher hätte freigegeben / überschrieben werden müssen) ist der Speicherhunger deutlich zurückgegangen.
__________________ Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll Geändert von MrNiceGuy (03.01.2007 um 18:31 Uhr). |
| | |
| | Nach oben #15 |
| Erfahrener Benutzer Registriert seit: 31.12.2006 Ort: Zürich
Beiträge: 298
|
Naja... Kann ich mir schon vorstellen. PHP5 kann ja auch einiges mehr (OOP...). Hast du Zahlen?
__________________ . <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination. |
| | |
| | Nach oben #16 |
| Erfahrener Benutzer Registriert seit: 18.03.2005
Beiträge: 591
|
Nein keine genauen Zahlen, aber bei einfachen Scripten waren es ca. 30-70kb mehr. Bei arbeiten mit der GDlib waren teilweise Unterschiede von 500kb ! Gemessen mit memory_get_usage(), selbe Scripte, einmal mit PHP4 und einmal mit PHP5. |
| | |
| | Nach oben #17 |
| Erfahrener Benutzer Registriert seit: 18.08.2005
Beiträge: 108
|
Bei PHP wird bei grösseren Versionswechseln schonmal der Memory-Manager grundlegend umgebaut, um Speicherfragmentierung usw. zu beeinflussen. Da kann sich schonmal der Speicherverbrauch ändern. Hat die 5.2er nicht wieder nen neuen?
|
| | |
| | Nach oben #18 |
| Blubb... öfz Registriert seit: 16.03.2006 Ort: Berlin
Beiträge: 419
|
Hi, danke für die zahlreichen Antworten! Dass PHP alle Vars in den Cache speichert, die im Script benutzt werden, im Grunde eigentlich alles in den Cache wandert, war mir klar. Leider haben wir immer noch keine wirkliche Lösung für das Problem gefunden. Haben nun einfach ne Option "kein Thumbnail erstellen" eingebaut, die der User nutzen kann, falls das Bild zu groß ist. Ich weiß, nicht das Wahre, aber der Server hat nur 1024 MB Ram... ^^
__________________ Vive la France! Welcome to Sarkoworld... |
| | |
| | Nach oben #19 |
| Benjamin Steininger Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.177
|
die frage ist WIE OFT wird das genutzt ? wenns ein eigener Server ist, kannst du ja max-ram runtersetzen und nur für das Script hochsetzen ? wirst ja merken ob es dazu kommt, dass der RAM wirklich irgendwann voll ist
|
| | |
| | Nach oben #20 |
| Erfahrener Benutzer Registriert seit: 31.12.2006 Ort: Zürich
Beiträge: 298
|
Ich würde das nicht dem User überlassen. Prüfe das doch selber.
__________________ . <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination. |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Shared Memory | Berti | PHP-Programmierung | 4 | 28.06.2007 23:05 |