Jak sobie poradzić z “Fatal error: Allowed memory size of ******** bytes exhausted (tried to allocate ** bytes) in…”?
Kilka dni temu napisał do mnie pewien człowiek z prośbą o pomoc przy instalacji WordPressa 2.9. Zeszło mi kilka dni ale ostatecznie postanowiłem odpisać tutaj na stronie, a nie w mailu – może moja odpowiedź przyda się jeszcze komuś.
Jak pisałem we wcześniejszym wpisie, po ściągnięciu i zainstalowaniu nowych plików aktualizacyjnych WP system wymaga od nas zaktualizowania bazy danych. Na tym etapie mojemu rozmówcy pojawił się poniższy komunikat:
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 35 bytes) in /***/wp-includes/wp-db.php on line 734
Błąd tego typu lub podobny może pojawiać się również przy aktualizacji pluginów lub nawet na wcześniejszych etapach aktualizacji samego WP.
Ale o co chodzi?
Otóż komunikat ten oznacza, iż WordPress potrzebuje więcej pamięci do wykonania zadania niż zostało mu systemowo udostępnione (ang. maximum amount of memory a script may consume).
Allowed memory size of – mówi nam o ilości dostępnej pamięci, a tried to allocate – mówi o ile została ona przekroczona. W podanym przykładzie jedynie o 35 bajtów :)
Najważniejsze: nie ma się co martwić o bazę i pliki – nic się nie uszkodziło…
Jak sobie z tym poradzić?
1) Wyjście najprostsze ale wymagające: dostępu do konfiguracji serwera lub dobrego kontaktu z administratorem albo zwykłego udostępnienia pliku php.ini do edycji. Tak więc jeśli spełniamy jeden z tych warunków:
- otwieramy plik php.ini
- odnajdujemy dział ; Resource Limits ;
- wyszukujemy linijkę: memory_limit = **M ; Maximum amount of memory a script may consume (16MB)
- zwiększamy wartość **M do 64MB lub więcej, w zależności od potrzeby… (w przedstawionym przypadku trzeba dać powyżej 64M)
- zapisujemy plik
- restartujemy nasz serwer – bardzo ważne!
- próbujemy ponownie wykonać naszą problematyczną aktualizację/instalację.
2) Jeśli nie spełniliśmy żadnego z wymagań przedstawionych w poprzednim punkcie możemy spróbować shackować WordPressa :) W nagrodę możemy liczyć na sprawność hakera. Wybierając tę wersję wydarzeń możemy również pójść dwiema drogami:
Pierwsza droga – prostsza:
- logujemy się na nasz serwer przez FTP
- wyszukujemy w głównym katalogu plik config.php
- otwieramy plik i na samym początku (zaraz po <?php) dodajemy nową linijkę: define(‘WP_MEMORY_LIMIT’,’64M’);
- oczywiście jako wartość można podać 64M lub więcej i warto pamiętać o znaku ; (średnika) na końcu linijki
- zapisać plik i spróbować jeszcze raz instalacji/aktualizacji
Druga droga - kłopotliwa:
- logujemy się na nasz serwer przez FTP
- wchodzimy do podkatalogu wp-admin
- wyszukujemy w katalogu plik install.php
- otwieramy plik i na samym początku (zaraz po <?php) dodajemy nową linijkę: ini_set(‘memory_limit’,’64M’);
- oczywiście jako wartość można podać 64M lub więcej i warto pamiętać o znaku ; (średnika) na końcu linijki
- zapisać plik i spróbować jeszcze raz instalacji/aktualizacji
Chciałbym tylko jeszcze dodać, że ostatnia metoda będzie działać jedynie do następnej aktualizacji WordPressa ponieważ wtedy plik /wp-admin/install.php zostanie nadpisany nową wersją.
Jeśli ktoś napotka podobny problem z pamięcią i któreś z podanych przeze mnie rozwiązań zadziała to bardzo proszę o komentarz!

1 stycznia 2010 @ 21:32
Witam,
Ja mam taki komunikat:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2798048 bytes) in /***/wp-includes/http.php on line 1331
Próbowałem metody nr 2 (obu dróg), ale niestety nic się nie zmieniło. :(
1 stycznia 2010 @ 22:11
mnie z kolei czeka aktualizacja mojego blogowego silniczka – Serendipity. Skok oddam z 1.4.1 do 1.5.1 i mam nadzieję, że lądowanie nie będzie bolesne.
1 stycznia 2010 @ 23:27
@krzychu81 – Szkoda, że nie zadziałało – w takim razie pozostaje Ci tylko poprosić administratora serwera o zmianę przydzielonej pamięci w pliku php.ini do 64 MB bo teraz masz jak widać tylko 32 MB i zabrakło ok. 2,5 MB…
@szuman – powodzenia w takim razie!
2 stycznia 2010 @ 09:48
Hmmm… 64MB to całkiem sporo.
Nie lepiej zamiast “łatać” przepychanie namiarowej ilości danych poprzez powiększanie limitu pamięci rzucić okiem co powoduje przekroczenie tej wartości i to poprawić?
Lepiej zęba wyczyścić i zaplombować, niż ból zęba leczyć Panadolem czy innym Apapem.
2 stycznia 2010 @ 11:12
Na nazwie.pl przy wykorzystaniu pluginu WP Automatic Upgrade obyło się bez przykrych niespodzianek ;)
2 stycznia 2010 @ 13:03
@Marek – W teorii masz rację ale nie każdy chce (i będzie potrafił) wyszukiwać i poprawiać problemy w oficjalnych skryptach WP albo optymalizować bazę… Wpis jest propozycją porad dla mało i średnio zaawansowanych użytkowników.
@Marcin – Ciekawa informacja, bo nas stronie wtyczek WP piszą, że WP Automatic Upgrade nie działa z najnowszą wersją WP 2.9…
2 stycznia 2010 @ 15:24
@Jakub – masz absolutną rację.
Tak przy okazji, to myślę, że powinien się jakiś patch pojawić; ~35MB to jednak sporo danych.
Pozdrawiam
2 stycznia 2010 @ 15:41
@Jakub – Mam wtyczkę w wersji 1.2.5 (nie wiem czy to istotne).
8 stycznia 2010 @ 23:08
Miałem problem z tematu, ale rozwiązania podane przej Jakuba niestety nie pomogły.
Przyczyna może być nieco inna.
1)Różnica między wartością Option Name w: “db_version” w “WP_Options” a wartością “wp_db_version” w pliku “version.php”.
(Version.php znajdziecie w folderze wp-include).
Po aktualizacji trzeba zajrzeć do version.php (tam jest odpowiednia wartość) i potem przez edycję w myPHPadmin(dostęp przez cPanel) zmienić wartość w WP_Options. U mnie to załatwiło sprawę
2) Jeśli to nie pomaga problemem może być błędna wartość
Option_Name “siteurl” of WP_Options table. Powinna zawierać URL głównej strony waszej strony. Trzeba zaktualizować Option_Value tego pola odświeżyć stronę bloga.
Poniżej link (po angielsku) do źródła ze screenshotami i jeszcze jednym rozwiązaniem.
http://www.clickonf5.org/wordpress/solution-database-upgrade-required/2247
Pozdrawiam
26 stycznia 2010 @ 22:22
Miałem ten sam problem, skorzystałem z rady na stronie: http://it.dth.pl/fatal-error-allowed-memory-size-of-xxxx-bytes-exhausted-tried-to-allocate-xxxx-bytes-in-test-php-on-line-89/
dodałem memory limit na 64 w pliku: wp-db.php i zadziałało :D
16 lutego 2010 @ 22:59
A ja się Pana podpytam bo widzę, że jest ładnie zorganizowana galria u Pana na stronie… Czy to za pomocą kpicasa gallery? Bo mam 2 zapytania – czy za pomocą tej wtyczki można na wordpressie publikować niepubliczne albumy? i jeszcze jak usunąć ramkę wokół thumbnailów zdjęc…? u mnie jest taka cieniutka ramka wokół kazdego zdjęcia. bardzo prosze o pomoc! a i jeszcze jedno, można komentować zdjęcia?
19 lutego 2010 @ 17:24
@ewa – Tak moja galeria jest na wtyczce kPicasa.
Ad. 1. TAK można publikować niepubliczne albumy. W tym celu należy wstawić we wpisie/stronie znacznik: KPICASA_GALLERY(NazwaAlbumu#qwvfd8uy7huvfd), gdzie NazwaAlbumu to wiadomo :), a qwvfd8uy7huvfd to klucz, który znajdziemy w linku do tej galerii, przy przeglądaniu przez serwis Picasa. np: http://picasaweb.google.com/ewapawlicka/NazwaAlbumu?authkey=qwvfd8uy7huvfd.
Ad. 2. Trzeba wejść w edycję stylu dla galerii (plik kpicasa_gallery.css) i wyedytować fragment:
/* the picture thumbnail */
table#kpg-pictures td img.kpg-thumb {
border: solid 1px black;
}
tam jest zdefiniowana teraz ramka (border), pełna (solid), o szerokości 1 px i koloru czarnego (black)
Ad. 3. Nie można komentować zdjęć przez kPicasa, komentarze są możliwe tylko do konkretnych zdjęć w serwisie Picasa albo do wpisu/strony na którym/ej galeria została umieszczona. Zawsze można pojedynczo albumy umieszczać w kolejnych wpisach i wtedy każdy album będzie mógł być komentowany…
29 maja 2010 @ 20:58
Chciałbym zauważyć że w opisie jest poważny błąd.
W przykładach typu: define(‘WP_MEMORY_LIMIT’, ‘64M’);
zamiast ’ powinno być ‘ – jak się przyjrzeć to jest różnica (taki chyba apostrof, ale zakręcony w drugą stronę), może dlatego tak wielu ludziom nie działa.
1 czerwca 2010 @ 19:46
@cyryl – W tym co napisałem nie ma błędu… Problem polega na tym, że tekst wyciągany z bazy jest tak dziwnie wyświetlany, że podstawowy apostrof zamieniany jest na ten cudaczny.
Tak wiec rada dla wszystkich:
Po przekopiowaniu wyrażenia:
define(‘WP_MEMORY_LIMIT’, ’64M’);
należy koniecznie zmienić ręcznie apostrofy na te poprawne!
1 czerwca 2010 @ 20:38
Spoko Jakub, fajnie że szybko zareagowałeś.
Skopiowałem to do pliku metodą kopiuj-wklej, jak zapewne 99% ludzi. Zauważyłem że coś jest nie tak tylko dzięki temu że gedit ma podświetlanie składni i to co przed chwilą wstawiłem było podświetlone inaczej.
Poza tym fajna stronka.
Pozdro
9 sierpnia 2010 @ 08:18
No u mnie niestety usługodawca blokuje możliwość ręcznej zmiany limitu pamięci, a także kiedy napisałem prośbę o zwiększenie limitu (nawet za dopłatą) to odpowiedział mi: “limit jest taki sam dla wszystkich serwerów i nie możemy go zmienić tylko dla jednego”… Czy to prawda? Nie wiem.
Pozdrawiam,
Michał Kuzemko.
10 sierpnia 2010 @ 00:35
@Michał – Z punktu widzenia technicznego mogą zmieniać co chcą dla każdego serwera ale mogą mieć po prostu takie zasady, że wszędzie konfiguracja ma być ta sama. Zawsze możesz zmienić hosting…