PHP Fatal Error: Allowed Memory Size Exhausted Nasıl Çözülür?
PHP memory_limit değeri aşıldığında bu hata oluşur. php.ini, .htaccess veya wp-config.php üzerinden kolayca çözülebilir.
PHP Hafıza Hatası Nedir?
PHP Fatal Error: Allowed Memory Size of X bytes exhausted hatası, bir PHP uygulamasının çalışırken izin verilen maksimum bellek sınırını aştığında ortaya çıkar. PHP her HTTP isteği için memory_limit direktifiyle belirlenmiş bir bellek kotasına sahiptir. Bu kota aşıldığında PHP betiği durdurup bu hata mesajını döndürür.
Varsayılan memory_limit değeri PHP sürümüne ve hosting ortamına göre 32MB, 64MB veya 128MB olarak gelebilir. Yoğun veri işleyen uygulamalar, WordPress gibi eklenti tabanlı sistemler, büyük görsel işleme operasyonları ve kapsamlı veritabanı sorguları bu limitin aşılmasına neden olur. Örneğin WordPress'te 40-50 aktif eklenti olan bir site, her sayfa yüklemesinde 200MB'ı aşkın bellek kullanabilir.
Hata mesajı genellikle şu formatta görünür:
Fatal error: Allowed memory size of 134217728 bytes exhausted
(tried to allocate 20971520 bytes)
in /var/www/html/wp-includes/class-wp-image-editor.php on line 422
134217728 bayt 128MB'a, 268435456 bayt 256MB'a karşılık gelir. Hata mesajında gösterilen satır numarası, belleğin tüketildiği PHP dosyasını işaret eder; ancak asıl sorun genellikle o dosyayı çağıran kod ya da tüketimi tetikleyen uygulama mantığındadır.
Bu hata kesinlikle sunucunun fiziksel belleğinin dolduğu anlamına gelmez. Sadece tek bir PHP betiği için ayrılmış limit aşılmıştır. Sunucunuzda 32GB RAM olsa bile memory_limit = 128M ayarıyla bu hatayı alabilirsiniz.
Olası Nedenler
memory_limitdeğeri çok düşük ayarlanmış (32MB veya 64MB gibi)- WordPress eklentilerinin toplam bellek tüketimi limiti aşıyor
- GD Library veya ImageMagick ile büyük görseller işleniyor
- WooCommerce büyük ürün katalogları veya sipariş listeleri çekiyor
- PHP kodunda bellek sızıntısı (memory leak) mevcut
- Büyük CSV, XML veya JSON dosyaları bellekte parse ediliyor
- Shared hosting ortamında sunucu tarafından bellek kısıtlanmış
- OPcache kapalı, her istekte PHP dosyaları yeniden derleniyor
Çözüm Adımları
1. php.ini ile Memory Limit Artırma
En kalıcı ve önerilen yöntemdir. Önce PHP'nin hangi php.ini dosyasını kullandığını bulun:
php --ini | grep "Loaded Configuration"
# veya
php -r "echo php_ini_loaded_file();"
Dosyayı açıp memory_limit satırını güncelleyin:
nano /etc/php/8.2/fpm/php.ini
# Şu satırı bulun:
memory_limit = 128M
# Şu şekilde değiştirin:
memory_limit = 256M
Değişikliği uygulamak için servisi yeniden başlatın:
# Apache için
sudo systemctl restart apache2
# PHP-FPM için
sudo systemctl restart php8.2-fpm
2. .htaccess ile Artırma (Apache)
Sunucuya doğrudan erişiminiz yoksa veya sadece belirli bir site için geçerli olmasını istiyorsanız, site kök dizinindeki .htaccess dosyasına ekleyin:
php_value memory_limit 256M
Not: Bu yöntem yalnızca Apache mod_php ile çalışır. Nginx + PHP-FPM ortamında etkisizdir.
3. wp-config.php ile WordPress'te Artırma
wp-config.php dosyasını açın ve /* That's all, stop editing! */ satırından önce ekleyin:
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');
WP_MAX_MEMORY_LIMIT, WordPress yönetici panelindeki büyük import ve güncelleme işlemleri için ek bellek sağlar.
4. PHP Kodunda Runtime Artırma
Belirli bir script için geçici olarak belleği artırmak istiyorsanız:
ini_set('memory_limit', '256M');
Bu yöntemi sadece geliştirme aşamasında ve belirli ağır scriptler için kullanın.
5. cPanel MultiPHP INI Editor
cPanel kullananlar için grafik arayüzden ayar yapmak mümkündür:
- cPanel → Software → MultiPHP INI Editor bölümüne gidin
- İlgili PHP sürümünü veya domain'i seçin
memory_limitdeğerini 256M olarak ayarlayın- Apply butonuna tıklayın
6. Plesk PHP Ayarları
Plesk kullananlar için:
- Plesk → Websites & Domains → İlgili domain
- PHP Settings bölümüne tıklayın
memory_limitsatırını bulun, 256M olarak güncelleyin- Değişiklikleri kaydedin
7. PHP-FPM Havuz Yapılandırması (Nginx)
Nginx + PHP-FPM kullanıyorsanız havuz yapılandırmasına ekleyin:
nano /etc/php/8.2/fpm/pool.d/www.conf
# Dosyanın sonuna ekleyin:
php_admin_value[memory_limit] = 256M
sudo systemctl restart php8.2-fpm
Özet ve Önleyici Tedbirler
- Memory limit artırmak geçici çözümdür; asıl sorunu (ağır eklenti, verimsiz kod) araştırın
- WordPress için 256M genellikle yeterlidir; büyük e-ticaret siteleri için 512M uygundur
- Sınırsız bellek (
memory_limit = -1) production ortamında kullanmayın - WordPress Query Monitor eklentisi ile hangi eklentilerin çok bellek tükettiğini tespit edin
- PHP 8.x sürümleri daha verimli bellek kullanımı sunar, güncelleyin
- OPcache etkinleştirerek bellek tüketimini optimize edin
- Kullanılmayan WordPress eklentilerini devre dışı bırakın veya silin
İlgili Makaleler
Yorumlar
Henüz yorum yok. İlk yorumu siz yapın!