Jak zwiększyć limit pamięci PHP twojej strony?
Komunikat Allowed memory size of … bytes exhausted oznacza, że jeden proces PHP zażądał więcej pamięci, niż pozwala limit. Limit podnosi się w panelu sterowania hostingu, osobno dla każdej strony; przy WordPressie można do tego dodać jedną linię w wp-config.php. Najpierw jednak proszę sprawdzić, jaki plik jest wymieniony w komunikacie. Jeśli błąd pojawia się nagle, zwykle stoi za nim wtyczka albo import, a podniesienie limitu tylko maskuje problem.
Co mówi komunikat o błędzie
W pełnym brzmieniu: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes), a po nim nazwa pliku i numer linii.
- Pierwsza liczba to obecny limit w bajtach. 134217728 bajtów to 128 MB.
- Druga liczba to tyle, ile PHP chciało w tej chwili jeszcze dobrać. Nie mówi nic o całkowitym zużyciu.
- Plik i linia pokazują, gdzie pamięć się skończyła.
Na działającej stronie odwiedzający widzi zwykle tylko białą stronę, kod błędu 500 albo, w WordPressie, komunikat o błędzie krytycznym. Właściwy komunikat znajduje się wtedy w dzienniku błędów. Więcej o tych kodach stanu w artykule co oznaczają kody błędów 403, 404 i 500.
Kiedy to się zdarza
Przy ciężkich kreatorach stron, dużych importach, sklepach internetowych z wieloma produktami i przy przetwarzaniu dużych zdjęć. Rzadko na zwykłej stronie firmowej.
Gdzie ustawia się limit
- W panelu sterowania. W WWW4 limit pamięci PHP ustawia się dla każdej strony w panelu sterowania, który otwiera się z portalu klienta. Jak wysoko można pójść, zależy od pakietu. To najpewniejsza droga.
- W wp-config.php, dla WordPressa. Nad linią, która mówi, żeby zakończyć edycję, proszę dodać: define('WP_MEMORY_LIMIT', '256M'); WordPress sam z siebie żąda tylko 40 MB dla części publicznej, 64 MB w multisite i 256 MB w panelu administracyjnym. Jeśli limit serwera jest już wyższy, ta linia niczego nie zmienia. Jeśli hosting nie dopuszcza wyższej wartości, także nie.
- W pliku .user.ini. Na hostingu, który na to pozwala, w katalogu głównym strony umieszcza się plik .user.ini z linią memory_limit = 256M. PHP domyślnie wczytuje ten plik ponownie tylko co pięć minut. Centralnego php.ini serwera na hostingu współdzielonym nie mogą Państwo zmieniać samodzielnie.
Linia z php_value w pliku .htaccess działa tylko wtedy, gdy PHP pracuje jako moduł Apache. W przeciwnym razie cała strona od razu zwraca błąd 500.
Sprawdzenie, czy nowa wartość obowiązuje
W WordPressie proszę zajrzeć w panelu administracyjnym do narzędzia stanu witryny, na kartę z informacjami, do sekcji o serwerze: tam podany jest limit pamięci PHP, który faktycznie obowiązuje.
Dlaczego podniesienie limitu nie zawsze jest rozwiązaniem
Strona, która nagle potrzebuje znacznie więcej pamięci, ma zwykle problem, a nie niedobór: wtyczkę, która ładuje wszystko naraz, import, który nie działa partiami, funkcję, która bez końca wywołuje samą siebie. W tym ostatnim przypadku wyczerpie się każdy limit, jakkolwiek wysoko go Państwo ustawią. Podniesienie limitu maskuje problem.
Limit obowiązuje ponadto dla każdego procesu PHP z osobna, a każdy odwiedzający, który w tym samym czasie otwiera stronę, uruchamia własny proces.
Jak znaleźć przyczynę
- Przeczytać ścieżkę w komunikacie o błędzie. Jeśli jest tam wp-content/plugins, a po nim nazwa katalogu, to jest to wtyczka, w której skończyła się pamięć. Zwykle to ona jest winna, ale nie zawsze: czasem pamięć zapełnia inna wtyczka.
- Przejrzeć dziennik błędów w panelu sterowania. W WordPressie można dodatkowo ustawić w wp-config.php WP_DEBUG i WP_DEBUG_LOG na true, a WP_DEBUG_DISPLAY na false. Błędy trafiają wtedy do debug.log w katalogu wp-content. Po zakończeniu poszukiwań proszę to wyłączyć.
- Sprawdzić, co się zmieniło. Aktualizacja, nowa wtyczka, duży import, nowy motyw. Na przyszłość warto najpierw testować aktualizacje; zob. jak bezpiecznie aktualizować WordPressa.
- Wyłączać wtyczki jedną po drugiej, aż błąd zniknie. Jeśli nie da się już wejść do panelu administracyjnego, proszę przez FTP albo menedżer plików zmienić nazwę katalogu podejrzanej wtyczki.
- Zmierzyć zużycie. Wtyczka Query Monitor pokazuje, ile pamięci zużyła każda strona.
- Zmniejszyć zadanie. Importować w mniejszych partiach.
Granica Państwa pakietu
Maksymalny limit pamięci jest częścią pakietu hostingowego. Najmniejszy pakiet jest przeznaczony dla strony firmowej albo bloga; sklep internetowy albo strona z ciężkim kreatorem wymaga większego pakietu. Pakiety znajdą Państwo na stronie ceny hostingu. Jeśli i tam stale dochodzą Państwo do maksimum, następnym krokiem jest własny serwer: proszę przeczytać, czym jest VPS i kiedy się na niego przenieść.
Najczęstsze pytania
Podniosłem limit, a błąd nadal występuje. Co teraz?
Proszę spojrzeć na pierwszą liczbę w komunikacie. Jeśli się nie zmieniła, ustawienie nie jest stosowane: plik leży w złym katalogu albo pakiet nie dopuszcza wyższej wartości. Jeśli liczba wzrosła, a pamięć mimo to się kończy, szukają Państwo wycieku, a nie niedoboru.
Ile pamięci PHP potrzebuje WordPress?
Sam WordPress potrzebuje niewiele. O zużyciu decydują wtyczki i motyw; proszę więc zmierzyć własną stronę, zamiast polegać na ogólnej regule.
Czy limit pamięci to to samo co maksymalny rozmiar przesyłanego pliku?
Nie. Przesyłanie plików zależy od upload_max_filesize i post_max_size. Nieudanego przesłania nie naprawi się większą ilością pamięci.
Nie udaje się?
Proszę przesłać nam przez kontakt nazwę domeny, pełny komunikat o błędzie i godzinę. Zajrzymy razem z Państwem do dziennika serwera.
Jeśli u Ciebie przebiega to inaczej niż opisano powyżej albo utknąłeś, skontaktuj się z nami, mając pod ręką nazwę domeny lub numer klienta, a przyjrzymy się temu razem.
Skontaktuj się z pomocą techniczną