WordPress'te "Allowed Memory Size Exhausted" Hatasını Çözün
Siteniz Fatal error: Allowed memory size of 268435456 bytes exhausted hatası veriyorsa, wp-config.php dosyasında / That's all, stop editing! / satırının üstüne şu satırı ekleyin.
Yayınlandı
Siteniz Fatal error: Allowed memory size of 268435456 bytes exhausted hatası gösteriyorsa, wp-config.php dosyasında /* That's all, stop editing! */ yorumunun üstüne şu satırı ekleyin: define( 'WP_MEMORY_LIMIT', '256M' );. Bu, çoğu siteyi bir dakikadan kısa sürede yeniden çalışır hale getirir. Ama gitmeden önce bu sayfanın geri kalanını okuyun, çünkü limiti artırmak bir teşhistir, tedavi değil. Çökme daha yüksek bir sayıda geri geliyorsa, asıl sorun sınırsızca bellek tüketen bir koddur ve daha yüksek bir tavan sadece ona daha fazla ip verir.
Hata aslında ne anlama geliyor
PHP, her isteğin ne kadar bellek ayırdığını takip eder. Tek bir istek php.ini içinde ayarlanan (ya da WordPress tarafından geçersiz kılınan) memory_limit değerinin ötesinde bellek ayırmaya çalıştığında, PHP isteği anında ölümcül bir hatayla sonlandırır ve öldüğü bayt sayısını yazdırır. 268435456 bytes 256M’dir. 134217728 128M’dir. 536870912 512M’dir. “tried to allocate” ifadesinden sonraki sayı, son bardağın boyutunu söyler; sorunun boyutunu değil.
WordPress kendi limitlerini PHP’ninkinin üzerine katmanlar. WP_MEMORY_LIMIT (varsayılan 40M, ya da daha yüksekse PHP limiti) ön yüzü yönetir. WP_MAX_MEMORY_LIMIT (varsayılan 256M) ise medya kütüphanesi ve eklenti güncellemeleri gibi meşru olarak daha fazla belleğe ihtiyaç duyan yönetici tarafı işlemleri yönetir. WordPress yüklenirken bu sabitlere göre ini_set('memory_limit', ...) çağrısı yapar — ama yalnızca hostunuz ini_set’e izin veriyorsa ve yalnızca hostunuzun belirlediği sabit üst sınıra kadar. İşte wp-config.php düzenlemesinin bazen hiçbir işe yaramamış gibi görünmesinin nedeni bu son kısımdır.
Sırayla çözün
1. WordPress limitini wp-config.php içinde artırın. İlk denenecek şey budur çünkü geri alınabilir ve başka hiçbir şeye dokunmaz.
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );
Bu satırların nereye gireceğinden emin değilseniz ya da diğer yaygın sabitleri de aynı anda doğru şekilde ayarlamak istiyorsanız, wp-config oluşturucumuz yapıştırabileceğiniz temiz bir blok yazar. Yerleşim önemlidir — “stop editing” satırının altındaki her şey yok sayılır.
2. Bu hiçbir işe yaramıyorsa, hostunuz PHP’yi sınırlıyordur. memory_limit değerini PHP seviyesinde artırın. php.ini içinde:
memory_limit = 256M
Birçok paylaşımlı hostta php.ini dosyasını doğrudan düzenleyemezsiniz. Bunun yerine web kök dizininize bir .user.ini dosyası koymayı deneyin ya da Apache/mod_php kurulumunda .htaccess üzerinden ayarlayın:
php_value memory_limit 256M
.htaccess içindeki php_value direktifinin, nginx veya PHP-FPM kurulumlarında 500 hatası verdiğini unutmayın; çünkü bu bir Apache/mod_php direktifidir. Ekledikten sonra 500 hatası alıyorsanız, sebebi budur — onu kaldırın ve .user.ini kullanın.
3. Gerçekten canlı olan değeri doğrulayın. Düzenlediğiniz şeye değil, PHP’nin bildirdiği şeye güvenin. Web kök dizininize tek satırlık bir dosya bırakın:
<?php echo ini_get('memory_limit');
Bunu bir tarayıcıda açın, değeri okuyun, sonra dosyayı silin. 256M ayarlamanıza rağmen hâlâ 128M diyorsa, hostunuz sizi geçersiz kılıyordur ve onlarla iletişime geçmeniz ya da kontrol panelindeki ayarı kullanmanız gerekir.
Çoğu rehberin atladığı kısım
Limiti artırmak teşhistir. Sonucu şöyle okuyun.
256M ayarladınız ve site normal trafik altında ayakta kalıyorsa, çok düşük olan meşru bir tavanınız varmış demektir — büyük medya kütüphaneleri, WooCommerce ya da sayfa oluşturucu (page builder) kullanan sitelerde yaygındır. İşiniz bitti.
256M ayarladınız ve yine çöktü, sonra 512M ayarladınız ve yine çöktü, artırmayı bırakın. Normal bir WordPress isteğinin 512M’ye ihtiyacı yoktur. Bellek kullanımı bir tavan olmadan yükseliyorsa, bir şey döngüye giriyor ya da birikiyordur: tüm bir veritabanı tablosunu bir diziye yükleyen bir eklenti, kendini özyinelemeli olarak tetikleyen bir add_action, tüm satırları aynı anda bellekte tutan bir içe aktarma rutini ya da aynı hook içinde çatışan iki eklenti. Limiti artırmak sınırsız bir döngüyü düzeltmez — sadece çökmeyi birkaç saniye erteler ve yeniden üretmeyi zorlaştırır.
Suçluyu bulmak için tüm eklentileri devre dışı bırakın ve Twenty Twenty-Four gibi varsayılan bir temaya geçin. Hata durursa, geri gelene kadar birer birer yeniden etkinleştirin. Nerede öldüğünü yakalamak için debug günlüğünü açın:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
wp-content/debug.log içindeki ölümcül satır, son parçayı ayıran dosyayı ve satır numarasını belirtir. Bu genellikle döngünün kendisidir ya da ondan bir fonksiyon çağrısı uzaklıktadır.
Yapılmaması gerekenler
WP_MEMORY_LIMIT değerini -1 ya da 1024M yapıp unutmayın. Sınırsız bellek bir sızıntıyı düzeltmez; kontrolden çıkmış bir isteğin tüm sunucuyu yemesine izin verir, bu da aynı makinedeki her siteyi çökertebilir ve hostunuzdan bir telefon almanıza neden olabilir. Bir tavan bir güvenlik özelliğidir. Bir tane bulundurun.
ini_set('memory_limit', '512M') satırını birincil çözüm olarak functions.php içine yapıştırmayın. Bazı hatalar için çok geç çalışır — çökme, temanızın functions.php dosyası çalışmadan önce WordPress çekirdeği yüklenirken gerçekleşirse, o satır hiçbir zaman çalışmaz. wp-config.php daha erken yüklenir ve doğru yerdir.
Bunun bir barındırma sorunu olduğunu varsayıp planınızı yükseltmeyin. Bazen gerçekten yetersiz bir barındırmadır. Ama çoğu zaman tam olarak aynı çökme, sebep eklentilerinizle birlikte taşındığı için daha büyük plana da sizi takip eder. Önce döngüyü eleyin; bedava.
Bir max_execution_time hatasını düzeltmek için memory_limit değerini artırmayın. Bunlar farklı mesajları olan farklı limitlerdir. Bellek tükenmesi “Allowed memory size … exhausted” der. Bir zaman aşımı ise “Maximum execution time … exceeded” der. Yanlış olanı artırmak bir öğleden sonranızı çöpe atar.
Hâlâ takıldınız mı?
Canlı limitin gerçekten 256M ya da daha yüksek olduğunu doğruladıysanız, tüm eklentiler kapalı ve varsayılan bir temayla test ettiyseniz ve hâlâ belleği tüketiyorsa, elinizde artırılacak bir tavan değil, debug günlüğünde peşine düşülmeye değer gerçek bir sızıntı var demektir. Ölümcül satırı yakalayın, hangi eklentinin dizinine işaret ettiğini not edin; işte bu sizin hata raporunuz. Limitlerin sandığınız yerde ayarlandığından emin olmak için önce temel wp-config.php sabitlerinizi wp-config oluşturucu ile doğru hale getirin — sonra gidip günlüğü okuyun.