![]() |
![]() |
![]()
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! -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 07:25 |