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!