Autor wpisu: Vokiel, dodany: 12.09.2009 14:16, tagi: php
WordPress ma to do siebie, że nie dba zbytnio o ograniczenie zużycia pamięci. Niestety, przy dodaniu większej ilości wtyczek (większej niż 5-7) zaczynają się problemy z wykorzystanym limitem pamięci.
Błędy pojawiają się najprędzej w panelu administracyjnym, co czynnie uniemożliwia poprawną pracę z systemem.
[11-Sep-2009 15:35:01] PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 170031 bytes) in /home/.../wp-includes/wp-db.php on line 501
Plugin WP-Memory-Usage pokazuje ile z dostępnej pamięci jest w użyciu.
Przyczyny
Co może być przyczyną takiego stanu rzeczy, i czy możemy coś z tym zrobić? Główną przyczyną jest funkcja inicjująca init oraz poprzedzające ją plugins_loaded i widgets_init. Funkcje te ładują do pamięci wtyczki oraz widgety, inicjują całą aplikację. Aby sprawdzić jak wygląda ładowanie strony pod względem wykorzystania pamięci możemy posłużyć się wtyczką WP Tuner. Po zainstalowaniu wtyczki przechodzimy do panelu zarządzania wtyczką wybieramy jedno z ustawień Presets: np Analyze Timing. Następnie otwieramy dowolną stronę panelu i przewijamy stronę do samego dołu: Jak widzimy na screenie ilość użytej pamięci skacze drastycznie do 26MB! po załadowaniu funkcji init do ponad 20MB tylko po załadowaniu pluginów! Dawno nie widziałem takiego marnotrawstwa pamięci
Rozwiązania
Możliwości rozwiązania problemu mamy kilka. Zacznijmy od najprostszych: zwiększenie limitu pamięci Jednak w przypadku, gdy nasz wordpress nie jest postawiony na dedyku mamy małą szansę na możliwość ingerencji w to ustawienie. Możemy napisać @ do admina. Jeśli natomiast mamy możliwość zmian konfiguracji możemy zastosować kilka wpisów: php.ini:
;; set new memory limit memory_limit = 64M
.htaccess:
# set new memory limit php_value memory_limit 64M
lub w php:
// set new memory limit ini_set('memory_limit','64M');