GoldenLine.pl  FaceBook  linkedin  Profeo  Google+  Nasza-Klasa  FILMWEB  wiki  last.fm  Flickr  linkedin  Allegro  EveryTrail

Jak sobie poradzić z „Fatal error: Allowed memory size of ******** bytes exhausted (tried to allocate ** bytes) in…”?

30 grudnia 2009 | 25 komentarzy | Kategorie: WWW

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 wp-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!

.

Może zainteresować Cię jeszcze:

25 komentarzy

  1. 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. :(

  2. 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.

  3. @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!

  4. 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.

  5. Na nazwie.pl przy wykorzystaniu pluginu WP Automatic Upgrade obyło się bez przykrych niespodzianek ;)

  6. @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…

  7. @Jakub – masz absolutną rację.

    Tak przy okazji, to myślę, że powinien się jakiś patch pojawić; ~35MB to jednak sporo danych.

    Pozdrawiam

  8. @Jakub – Mam wtyczkę w wersji 1.2.5 (nie wiem czy to istotne).

  9. 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

  10. 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

  11. 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?

  12. @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…

  13. 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.

  14. @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!

  15. 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

  16. 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ł

  17. @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…

  18. Zadziałało – wielkie dzięki za konkretną pomoc!

  19. @Mirosław Dulemba – Witam na mojej stronie i dziękuję za komentarz!
    Cieszę się, że mój wpis pomógł Ci w działaniach z WordPresem!
    Zapraszam przy okazji na stronę mojej firmy specjalizującej się w WordPressie – http://www.wp-expert.pl

  20. Witam,
    bardzo dziękuję za prezentację rozwiązania, które jak widać niejednemu pomogło, mi również, za co dziękuję. W gwoli uściślenia, w „pierwszej drodze” zamiast „config.php”, powinno być „wp-config.php”, bynajmniej gdyby ktoś miał problemy ze znalezieniem tego pierwszego, wystarczy całą instrukcję zastosować do wspomnianego przeze mnie pliku, u mnie pomogło bez problemu.

  21. Chciałem dodać jeszcze, że u mnie problem dotyczył pliku menu.php i którejś tam linii. Po zastosowaniu tej pierwszej drogi, zaczęło mi prawie wszystko działać. Problem się pojawił, kiedy chciałem wysłać wpis do publikacji.. znów to samo. Być może wtedy właśnie znów potrzeba była większa ilość pamięci. Poszperałem na forum WordPressa, i znalazłem rozwiązanie problemu w przypadku braku dostępu do pliku php.ini –> http://wordpress.org/support/topic/fatal-error-allowed-memory-size-6#post-1017842

    Gdy wyedytowałem plik .htaccess, z powrotem przywróciłem katalog pluginów, który wcześniej „wyłączyłem” wszystko teraz hula. Mam nadzieję, że to ostateczne rozwiązanie mojego problemu ;)

  22. @Krzysztof – Witam na mojej stronie i dziękuję za komentarz!
    Cieszę się też, że mogłem pomóc :)
    Nazwę config.php oczywiście już poprawiłem na wp-config.php!

  23. Witam Jakub,

    Dziekuje za pomoc,podalem w php 128MB i problem zostal rozwiazany.
    Jednak nie bardzo rozumie ten proces.
    Potrzebna pamiec zostala wymuszona na moim FTP ?
    Dziekuje z gory za odpowiedz.
    Sorry nie mam polskiej trzcionki.

  24. @cris – To jest wymuszenie większego przydziału pamięci serwera na Twoim hostingu do obsługi skryptów PHP wchodzących w skład WordPressa i jego wtyczek.

Trackback/Pingback

  1. Blog Młodego Taty » Archiwum bloga » Koszulkowe wyznanie miłości i wordpressowy problem. - [...] in [..]. Rozwiązanie okazało się złożone. Najpierw skorzystałem z porady zamieszczonej nw blogu Jakuba Milczarka. Wybrałem pierwszą drogę, która ...

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*

Poinformuj mnie o nowych komentarzach na e-mail. Możesz także SUBSKRYBOWAĆ ten wpis bez komentowania.