![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 151 Pomógł: 2 Dołączył: 2.08.2012 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam
Zrobiłem sobie upload plków i mam pewien problem otóż przy ładowaniu obrazka o rozmiarze 8 megabajtów otrzymuję taki oto bład Allowed memory size of 134217728 bytes exhausted (tried to allocate 6293 bytes) Z tego co przeczytałem oznacza on że serwer potrzebuje wiecej pamieci niz mu przydzieliłem i nawet wiem jak ją zwiekszyc. Pojawia sie jednak pytanie czy to normalne ze przy przetwarzaniu obrazka 8megabajtów serwer potrzebuje az tyle pamieci?? To co sie stanie jak będę miał serwer z 8GB ramu i milion wgrywanych plików przez różnych użytkowników ![]() ![]() ![]() Ten post edytował johnyMajster 29.09.2012, 21:30:56 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 129 Pomógł: 17 Dołączył: 17.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
istotna jest też rozdzielczość obrazka, co robisz gdy go wysyłasz na serwer ? generujesz miniaturki czy coś ?
-------------------- PDO nie gryzie....
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 114 Pomógł: 12 Dołączył: 15.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
istotna jest też rozdzielczość obrazka, co robisz gdy go wysyłasz na serwer ? generujesz miniaturki czy coś ? Nawet jak byś generował miniatury to nie powinno być problemu(134217728B = 128MB to wystarczająco), możliwe, że gdzieś wycieka ci pamięć. Przejrzyj skrypt ew. spróbuj dodać na początku to: Lecz przy takim limicie stawiam na: 1. Udało ci się napisać super niewydajny skrypt 2. Gdzieś coś ci wycieka "memory leaking", przeglądnij dodatkowo poprawność pętli. -------------------- Pomogłem? Kliknij POMÓGŁ
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 151 Pomógł: 2 Dołączył: 2.08.2012 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
istotna jest też rozdzielczość obrazka, co robisz gdy go wysyłasz na serwer ? generujesz miniaturki czy coś ? Wgrywam obrazek 6700X4700 Robie trzy mniejsze na podstawie tego wiekszego 800X600 400X300 150X100 Dodatkowo sprawdzam czy użytkownik jest włascicielem konta Nawet jak byś generował miniatury to nie powinno być problemu(134217728B = 128MB to wystarczająco), możliwe, że gdzieś wycieka ci pamięć. Przejrzyj skrypt ew. spróbuj dodać na początku to: Lecz przy takim limicie stawiam na: 1. Udało ci się napisać super niewydajny skrypt 2. Gdzieś coś ci wycieka "memory leaking", przeglądnij dodatkowo poprawność pętli. Rzeczywiscie jak to dałem to śmiga na 128. Ile mniej wiecej mega powinien wymagac skrypt do uploadu? |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Problemem nie jest wgrywanie pliku, a jego wczytanie przez skrypt generujący miniatury, ponieważ ten ostatni wymaga całego obrazu w pamięci. Obraz o rozdzielczości 6700×4700 to 90 do 120 MiB danych (w zależności od obecności kanału alpha w obrazie).
Jeżeli mamy problem z pojemnością jakieś zmiennej/dysku/czegokolwiek powinniśmy dążyć do zwiększenia jej nie dwukrotnie, a o rząd wielkości. Tutaj byłoby to więc 1024 MiB, jednak 512 MiB myślę, że również wystarczy. Ten post edytował Crozin 30.09.2012, 18:57:43 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 151 Pomógł: 2 Dołączył: 2.08.2012 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Problemem nie jest wgrywanie pliku, a jego wczytanie przez skrypt generujący miniatury, ponieważ ten ostatni wymaga całego obrazu w pamięci. Obraz o rozdzielczości 6700×4700 to 90 do 120 MiB danych (w zależności od obecności kanału alpha w obrazie). Jeżeli mamy problem z pojemnością jakieś zmiennej/dysku/czegokolwiek powinniśmy dążyć do zwiększenia jej nie dwukrotnie, a o rząd wielkości. Tutaj byłoby to więc 1024 MiB, jednak 512 MiB myślę, że również wystarczy. Sprawdziłem błąd generuje linijka z ImageCreateFromJPEG. Zastanawia mnie jak pisac optymalne skrypty moze cos podpowiecie ![]() korzystam ze skryptu z gajdy:
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Problemem jest konieczność wczytania całego obrazu na raz do pamięci przy korzystaniu z GD. Ty natomiast musiałbyś albo zwiększyć limit pamięci, albo wykonywać miniaturki fragmentów obrazu. To ostatnie na pewno pozwoliłoby na małe zużycie pamięci, ale będzie wolniejsze i dużo, dużo bardziej skomplikowane - prawdopodobnie nie istnieją nawet gotowe narzędzia do realizacji tego w PHP.
Cytat Zastanawia mnie jak pisac optymalne skrypty moze cos podpowiecie Ale optymalnie względem czego? Zużycia pamięci, pracy dysku, czasu pracy procesora itp. itd. Nie zawsze da się zrobić coś "naj" we wszystkich kategoriach.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.07.2025 - 09:42 |