![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Od razu przechodzę do rzeczy. Mam skrypt, na który przesyłane są spore rozmiarami dane w formie RAW POST. Skrypt odbiera te dane poprzez pointer do php://input, zczytuje je i procesuje. Wszystko fajnie działa. Okazuje się jednak, że są spore problemy z pamięcią. Dokładnie rzecz ujmując: Po przesłaniu na skrypt 1MB danych, od razu po jego załadowaniu (zaraz po <?php) zużycie pamięci sięga ~2MB (~1MB wymaga samo PHP), dodatkowo PIK pamięci wynosi ~4MB. Dane nie są jeszcze wczytane przez skrypt więc po ich zaczytaniu pamięć wzrasta do jakichś ~3MB (1MB więcej co jest logiczne). Problemem jest to, że właśnie już na wstępie PHP zajmuje sobie pamięć na to co ma w php://input a nawet coś konkretnego z tym robi i to (wg moich wyliczeń) robi coś z tym 3 razy (PIK:4MB - 1MB na PHP co daje 3MB czyli potrójny rozmiar przesłanych danych). Liczby przedstawione przeze mnie są przykładowe ale przesyłanie danych o innych wielkościach skutkuje dokładnie tym samym (zawsze PHP zajmują pamięć na to a PIK wynosi 1MB + 3 x rozmiar danych). Sprawdziłem wszystkie możliwe zmienne, opcja ALWAYS_POPULATE_RAW_POST*** jest wyłączona. Mimo to nic nie mogę zrobić z tą pamięcią. Problem jest dość istotny bo przy założeniu, że dam ograniczenie pamięci na powiedzmy 64MB to już przesłanie 25MB wykrzacza skrypt (PIK wynosi ponad 75MB pamięci). Szukam jednego z dwóch rozwiązań: 1. Czy da się coś zrobić by skrypt PHP nie zajmował tej pamięci już na samym starcie? 2. Jeśli nie - to czy można ją jakoś zwolnić (do samego końca skryptu jest ona zajęta). Próbowałem kombinować z GC itp ale nic to nie daje. Ma ktoś jakiś pomysł? Spotkał się z czymś podobnym? Każda wskazówka może być pomocna - dzięki! |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Hmm a próbowałeś cachować dane już na starcie? http://stackoverflow.com/a/6106217
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odpowiedź ale to nic nie daje (IMG:style_emoticons/default/sad.gif) - problemem nie jest tu wielkość samych danych bo można je czytać po kawałku ale to że PHP je trzyma gdzieś w pamięci i ta pamięć zajmuje pamięć samego skryptu :/
Nawet kopiując stream do streama (z php://input do jakiegoś pliku) czyli praktycznie bez zużycia pamięci przez skrypt ma on już na starcie PIK pamieci w wysokości 1 + 3x[rozmiar danych] - co tak jak pisałem przy danych 25MB i LIMIT na 64M daje FATAL ERROR o przekroczeniu pamięci jak tylko odpala się skrypt :/ |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 02:17 |