Powrót do bazy wiedzy
Webhostingphptroubleshooting

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

  1. 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.
  2. 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.
  3. 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ę

  1. 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.
  2. 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ć.
  3. 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.
  4. 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.
  5. Zmierzyć zużycie. Wtyczka Query Monitor pokazuje, ile pamięci zużyła każda strona.
  6. 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.

#php memory limit#wyczerpana pamiec#biala strona wordpress
Nie możesz sobie poradzić?

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ą
Trust Guard Security Scanned
Zadzwoń teraz
Wyślij e-mail