![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witajcie,
nie do końca wiem jak w PHP narazić się na wyciek pamięci, ale chyba właśnie padłem jego ofiarą. Mam skrypt konsolowy, który czyta po kolei strony z zewnętrznego serwera i zawsze po około 40-50-ciu tysiącach iteracji otrzymuję błąd w stylu: Cytat PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 421888 bytes) in ... on line 36 A to mój kod (uprościłem dla przykładu):
Linia 36. to: Czy po kroku iteracji zawartość $html dalej jest trzymana w pamięci? Jakoś nie chce mi się w to wierzyć. Ten post edytował SmokAnalog 4.02.2018, 13:09:52 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
memory_get_usage
Po prostu sprawdź w którym momencie ilość pamięci wzrasta. Może masz jakąś tablicę której nie czyścisz, może to jakiś wbudowany mechanizm PHP dla danej funkcji. Wywołaj tą funkcję po każdym "bloku", następnie w danym "bloku" (tym który zwiększa zużycie) po każdej linijce itp. Jak znajdziesz linijkę to już pewnie sobie poradzisz. Podawanie fragmentu kodu jest dobre w większości przypadków - ale nie tutaj, możesz pokazać całość. Pokazałeś tylko file_get_contents a na 99% przyczyna jest w innym miejscu. To, że w tej lini występuje błąd też nic nie mówi - jeżeli mamy 50 kb dostępnej pamięci, a file_get_contents zabiera tylko 5 kb pamięci, to chcemy się dowiedzieć skąd pochodzi reszta tj. 45 kb. A, że akurat została przekroczona w tym miejscu - to bez znaczenia. Ten post edytował markuz 4.02.2018, 21:22:28 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 21:16 |