PHP Allowed Memory Size Exhausted Hatası Nasıl Çözülür?

WordPress veya PHP tabanlı bir web sitesini kullanırken karşılaşabileceğiniz Allowed Memory Size Exhausted hatası, çalışan PHP işleminin kendisine ayrılan bellek sınırını aşması durumunda ortaya çıkar. Bu hata nedeniyle web sitenizin bazı sayfaları açılmayabilir, yönetim paneline giriş yapılamayabilir veya eklenti ve tema işlemleri tamamlanamayabilir.

Özellikle WordPress eklentileri, WooCommerce mağazaları, büyük görsel işlemleri ve yoğun veri işleyen uygulamalarda görülebilen bu sorunun çözümü için yalnızca bellek limitini yükseltmek yeterli olmayabilir. Öncelikle hangi işlemin belleği tükettiğini belirlemek gerekir.

Bu rehberde PHP bellek limitinin ne olduğunu, hatanın nedenlerini ve cPanel, WordPress yapılandırma dosyaları veya VPS sunucu üzerinden nasıl çözülebileceğini adım adım ele alıyoruz.

Allowed Memory Size Exhausted Hatası Nedir?

PHP, sunucu kaynaklarının kontrolsüz tüketilmesini önlemek için her PHP işleminin kullanabileceği bellek miktarını sınırlandırabilir. Bu sınır memory_limit yapılandırma parametresiyle belirlenir.

Bir PHP betiği kendisine tanımlanan bellek miktarından daha fazlasını kullanmaya çalıştığında işlem durdurulur ve Allowed Memory Size Exhausted hatası oluşur.

Karşılaşabileceğiniz örnek hata mesajı şu şekildedir:

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted
(tried to allocate 4096 bytes) in /home/user/public_html/wp-content/plugins/example/plugin.php on line 245

Bu hata mesajındaki değerler sorunun kaynağını anlamanıza yardımcı olur:

  • 134217728 bytes: PHP işlemi için tanımlanan bellek sınırını ifade eder. Bu örnekte yaklaşık 128 MB'tır.
  • tried to allocate 4096 bytes: PHP'nin ek olarak ayırmaya çalıştığı bellek miktarıdır.
  • plugin.php: Hatanın meydana geldiği dosyayı gösterir.
  • line 245: İlgili dosyada hatanın oluştuğu satır numarasıdır.

Hata mesajında bir eklenti veya tema dosyasının görünmesi, sorunun mutlaka o yazılımın hatalı olduğu anlamına gelmez. İlgili dosya yalnızca bellek sınırına ulaşılan işlem noktası olabilir. Bu nedenle log kayıtları ve uygulama davranışı birlikte değerlendirilmelidir.

PHP Memory Limit Nedir?

memory_limit, bir PHP betiğinin kullanabileceği maksimum bellek miktarını belirleyen PHP yapılandırma ayarıdır. Örneğin 128M değeri, tek bir PHP işlemi için yaklaşık 128 MB bellek sınırı tanımlar.

Yaygın olarak karşılaşabileceğiniz bellek limitleri şunlardır:

  • 64M: Çok basit uygulamalarda yeterli olabilir; modern WordPress sitelerinde yetersiz kalabilir.
  • 128M: Temel WordPress siteleri için başlangıç seviyesi olarak kullanılabilir.
  • 256M: Birçok standart WordPress sitesi için daha geniş çalışma alanı sağlar.
  • 512M: WooCommerce, sayfa oluşturucular ve yoğun eklenti kullanan sitelerde ihtiyaç duyulabilir.

Bu değerler kesin gereksinimler değildir. Gerçek ihtiyaç kullanılan tema, eklentiler, PHP işlemleri ve sunucunun toplam kaynaklarına göre değişir. Bellek limitini gereksiz yere yükseltmek, özellikle aynı anda çok sayıda PHP işlemi çalışıyorsa sunucunun RAM kaynaklarını tüketebilir.

Allowed Memory Size Exhausted Hatası Neden Oluşur?

1. PHP Memory Limit Değerinin Düşük Olması

Hosting hesabınızda tanımlanan PHP bellek limiti, web sitenizin gerçekleştirdiği işlemler için yetersiz kalabilir. Özellikle yönetim panelinde eklenti güncelleme, içe aktarma veya büyük görsel işleme gibi işlemler sırasında bu durum ortaya çıkabilir.

2. Belleği Fazla Tüketen WordPress Eklentileri

Bazı eklentiler büyük veri kümelerini belleğe yükleyebilir veya gereğinden fazla kaynak tüketebilir. Özellikle yedekleme, güvenlik taraması, SEO analizi, görsel optimizasyonu ve içe aktarma eklentileri yüksek bellek ihtiyacı oluşturabilir.

3. Ağır Tema ve Sayfa Oluşturucular

Karmaşık tema yapıları ve görsel sayfa oluşturucular, yönetim panelinde veya ziyaretçi isteklerinde daha fazla PHP belleği kullanabilir. Çok sayıda bileşen, özel alan ve dinamik içerik içeren sayfalarda bu ihtiyaç artabilir.

4. WooCommerce Ürün ve Sipariş İşlemleri

Ürün sayısı yüksek mağazalarda toplu ürün içe aktarma, sipariş raporları, stok güncellemeleri ve filtreleme işlemleri önemli miktarda bellek tüketebilir. Bu işlemler sırasında PHP bellek sınırı aşılabilir.

5. Büyük Görseller ve Veri İşleme İşlemleri

Yüksek çözünürlüklü görsellerin boyutlandırılması, toplu görsel optimizasyonu ve büyük dosyaların işlenmesi PHP belleğini zorlayabilir. Benzer şekilde büyük veritabanı sorguları ve dışa aktarma işlemleri de yüksek bellek kullanımı oluşturabilir.

6. Sunucu Kaynaklarının Yetersiz Olması

PHP memory_limit değeri tek bir PHP işleminin kullanabileceği belleği sınırlar. Ancak sunucunun toplam RAM miktarı bundan farklıdır. Aynı anda çok sayıda PHP işlemi çalışıyorsa toplam bellek tüketimi sunucunun fiziksel RAM kapasitesini aşabilir.

Bu nedenle yalnızca PHP limitini yükseltmek her zaman çözüm değildir. Özellikle yoğun trafik alan web sitelerinde PHP-FPM süreçleri, eş zamanlı istek sayısı ve toplam RAM kullanımı birlikte incelenmelidir.

Allowed Memory Size Exhausted Hatası Nasıl Çözülür?

Hatanın çözümü için aşağıdaki yöntemleri sırasıyla uygulayabilirsiniz. İşleme başlamadan önce web sitenizin ve yapılandırma dosyalarınızın yedeğini almanız önerilir.

1. cPanel Üzerinden PHP Memory Limit Değerini Artırma

cPanel kullanan hosting hesaplarında PHP bellek limitini değiştirmek için MultiPHP INI Editor aracından yararlanabilirsiniz.

  1. cPanel hesabınıza giriş yapın.
  2. Yazılım (Software) bölümünü açın.
  3. MultiPHP INI Editor seçeneğine tıklayın.
  4. Açılan ekranda ayarını değiştirmek istediğiniz alan adını seçin.
  5. memory_limit satırını bulun.
  6. Mevcut değeri, uygulamanızın ihtiyacına ve hosting kaynaklarınıza uygun daha yüksek bir değerle değiştirin.
  7. Apply düğmesine basarak değişiklikleri kaydedin.

Örneğin mevcut limitiniz 128M ise ve sunucunuzun kaynakları uygunsa 256M değerini deneyebilirsiniz. Değişiklikten sonra web sitenizi ve hata kayıtlarını tekrar kontrol edin.

Not: MultiPHP INI Editor seçeneği hosting sağlayıcınız tarafından devre dışı bırakılmış olabilir. Böyle bir durumda teknik destek ekibinizden ilgili PHP ayarının kontrol edilmesini isteyin.

2. wp-config.php Dosyasından WordPress Bellek Limitini Artırma

WordPress, kendisi için talep edeceği bellek miktarını WP_MEMORY_LIMIT sabitiyle belirleyebilir. Yönetim paneli gibi daha fazla bellek gerektiren işlemler için WP_MAX_MEMORY_LIMIT sabiti de kullanılabilir.

Öncelikle cPanel Dosya Yöneticisi veya FTP üzerinden WordPress'in ana dizinindeki wp-config.php dosyasını açın.

Aşağıdaki satırları dosyaya ekleyebilirsiniz:

define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');

Bu satırları /* That's all, stop editing! Happy publishing. */ yorumundan önce ekleyin.

Önemli: Bu sabitler PHP'nin sunucu tarafında izin verdiği bellek sınırını aşamaz. Hosting sağlayıcınız daha düşük bir memory_limit uyguluyorsa yalnızca wp-config.php dosyasını değiştirmek yeterli olmayacaktır. Önce PHP yapılandırmasındaki gerçek limitin kontrol edilmesi gerekir.

3. php.ini Dosyasını Düzenleme

cPanel veya sunucu yönetim erişiminiz varsa PHP yapılandırma dosyası üzerinden de bellek limitini değiştirebilirsiniz.

İlgili PHP yapılandırma dosyasına şu satırı ekleyin veya mevcut değeri güncelleyin:

memory_limit = 256M

Değişiklikten sonra kullandığınız PHP çalışma biçimine göre ayarların yeniden yüklenmesi gerekebilir. PHP-FPM kullanılıyorsa ilgili PHP-FPM servisinin yeniden başlatılması gerekebilir.

Birden fazla PHP sürümü bulunan sunucularda her sürümün farklı yapılandırma dosyası olabileceğini unutmayın. Yanlış PHP sürümünün php.ini dosyasını düzenlemek, web sitenizde herhangi bir değişiklik oluşturmamasına neden olabilir.

4. .user.ini Dosyası Üzerinden Ayarlama

Bazı PHP-FPM ve CGI yapılandırmalarında alan adına özel PHP ayarları .user.ini dosyası üzerinden tanımlanabilir.

Web sitenizin ilgili yapılandırmayı desteklemesi durumunda, site kök dizinindeki .user.ini dosyasına şu satırı ekleyebilirsiniz:

memory_limit = 256M

Bu yöntemin her hosting ortamında geçerli olmadığını unutmayın. Kullanılan PHP handler ve sunucu yapılandırması hangi dosyanın dikkate alınacağını belirler. Değişiklikten sonra etkin değeri kontrol edin.

5. Sorunlu Eklentiyi veya Temayı Tespit Etme

Bellek limitini yükseltmenize rağmen hata devam ediyorsa bellek tüketimine neden olan eklenti veya temayı bulmanız gerekir.

  1. WordPress yönetim paneline erişebiliyorsanız eklentileri geçici olarak devre dışı bırakın.
  2. Hatanın ortadan kalkıp kalkmadığını kontrol edin.
  3. Eklentileri tek tek yeniden etkinleştirin.
  4. Hata tekrar ortaya çıktığında son etkinleştirdiğiniz eklentiyi inceleyin.
  5. İlgili eklentinin güncel sürümünü, uyumluluğunu ve hata kayıtlarını kontrol edin.

Yönetim paneline erişemiyorsanız cPanel Dosya Yöneticisi veya FTP üzerinden wp-content/plugins dizinini kullanabilirsiniz. Eklentileri kontrollü biçimde devre dışı bırakmak için ilgili klasörün adını geçici olarak değiştirebilirsiniz.

Canlı bir web sitesinde bu işlemleri yaparken ziyaretçileri ve mağaza işlemlerini etkileyebileceğinizi unutmayın. Mümkünse önce test ortamında uygulayın.

6. PHP Error Log Kayıtlarını İnceleme

Hata kayıtları, bellek tüketiminin hangi dosya veya işlem sırasında oluştuğunu anlamanızı sağlar.

cPanel üzerinde Metrics > Errors bölümünü veya hosting sağlayıcınızın sunduğu hata kayıtları ekranını kontrol edebilirsiniz. Sunucu yönetim erişiminiz varsa PHP ve web sunucusu loglarını da inceleyebilirsiniz.

Özellikle aşağıdaki bilgileri değerlendirin:

  • Hatanın meydana geldiği tarih ve saat
  • Hata mesajındaki bellek sınırı
  • Bellek ayırmaya çalışan dosyanın yolu
  • Hatanın belirli bir eklenti veya işlem sırasında tekrarlanıp tekrarlanmadığı
  • Aynı zaman aralığında oluşan diğer PHP veya sunucu hataları

Bu kayıtlar sorunun yalnızca düşük bellek limitinden mi yoksa uygulamadaki bir işlemden mi kaynaklandığını ayırt etmenize yardımcı olur.

VPS Sunucuda PHP Bellek Sorunu Nasıl İncelenir?

Web siteniz VPS veya VDS sunucu üzerinde çalışıyorsa PHP bellek limitinin yanı sıra sunucunun toplam RAM kullanımını da kontrol etmeniz gerekir. Çünkü PHP işlemlerinin her biri ayrı ayrı bellek tüketirken aynı anda çalışan işlemler toplam RAM kullanımını artırır.

Linux Üzerinde RAM Kullanımını Kontrol Etme

SSH bağlantısıyla sunucuya giriş yaptıktan sonra aşağıdaki komutu çalıştırabilirsiniz:

free -h

Bu komut toplam, kullanılan ve kullanılabilir bellek miktarını gösterir.

Çalışan işlemleri ve bellek tüketimini incelemek için:

top

Alternatif olarak:

htop

komutunu kullanabilirsiniz. htop sisteminizde yüklü değilse dağıtımınızın paket yöneticisiyle kurulması gerekebilir.

PHP-FPM Süreçlerini Kontrol Etme

PHP-FPM kullanan sunucularda aynı anda çalışan PHP worker sayısı toplam bellek tüketimini doğrudan etkileyebilir. Bu nedenle yalnızca tek bir PHP işleminin memory_limit değerine bakmak yeterli değildir.

PHP-FPM süreçlerini görmek için aşağıdaki komutlardan yararlanabilirsiniz:

ps aux | grep '[p]hp-fpm'

Sunucuda çok sayıda PHP worker çalışıyorsa, her birinin bellek tüketimi ve PHP-FPM havuz ayarları birlikte değerlendirilmelidir.

Örneğin 256 MB bellek limitine sahip çok sayıda PHP işleminin aynı anda çalışması, sunucunun toplam RAM kapasitesini zorlayabilir. Bu nedenle PHP-FPM için süreç sayısı ve sunucu kaynakları dengeli yapılandırılmalıdır.

Sunucu Kaynakları Yetersizse Ne Yapılmalı?

Uygulama gereksinimleri arttığı halde mevcut sunucunun RAM ve işlemci kapasitesi yetersiz kalıyorsa yalnızca PHP ayarlarını değiştirmek kalıcı çözüm sağlamayabilir.

Bu durumda aşağıdaki adımlar değerlendirilebilir:

  • Gereksiz PHP süreçlerini ve arka plan görevlerini incelemek
  • PHP-FPM worker sayısını sunucu kaynaklarına göre düzenlemek
  • Bellek tüketen eklenti ve uygulama işlemlerini optimize etmek
  • Veritabanı sorgularını ve önbellekleme yapılandırmasını gözden geçirmek
  • Uygulamanın ihtiyacına uygun RAM ve işlemci kaynaklarına sahip bir VPS veya VDS altyapısı kullanmak

Sunucu kapasitesi ve kaynak yönetimi hakkında daha fazla bilgi almak için VDS sunucu kiralama ve bulut sunucu kiralama hizmetlerini inceleyebilirsiniz.

PHP Memory Limit Artırmak Her Zaman Çözüm müdür?

Hayır. Bellek limitini artırmak, PHP işleminin daha fazla bellek kullanmasına izin verir; ancak belleğin neden tükendiğini ortadan kaldırmaz.

Örneğin hataya hatalı çalışan bir eklenti, kontrolsüz döngü, verimsiz sorgu veya gereksiz yere bellekte tutulan büyük veri kümeleri neden oluyorsa limit artırıldıktan sonra aynı problem daha yüksek bir bellek seviyesinde yeniden ortaya çıkabilir.

Ayrıca yüksek memory_limit değerleri, çok sayıda eş zamanlı PHP işlemi bulunan sunucularda toplam RAM tüketimini artırabilir. Bu nedenle doğru yaklaşım, önce hatanın kaynağını belirlemek ve ardından uygulama ile sunucu kaynaklarını birlikte değerlendirmektir.

Allowed Memory Size Exhausted Hatasını Önlemek İçin Öneriler

  • WordPress çekirdeğini, temaları ve eklentileri güncel tutun.
  • Kullanmadığınız eklentileri kaldırın.
  • Büyük görselleri web sitenize yüklemeden önce optimize edin.
  • Toplu içe aktarma ve dışa aktarma işlemlerini kontrollü gerçekleştirin.
  • PHP error log kayıtlarını düzenli olarak kontrol edin.
  • Web sitenizin bellek ve işlemci kullanımını takip edin.
  • PHP memory_limit değerini uygulamanızın gerçek ihtiyacına göre belirleyin.
  • Yoğun trafik alan sitelerde PHP-FPM süreçlerini ve toplam RAM kullanımını izleyin.

Sıkça Sorulan Sorular

Allowed Memory Size Exhausted hatası neden oluşur?

PHP betiği, kendisine tanımlanan memory_limit değerinden daha fazla bellek kullanmaya çalıştığında bu hata oluşur. Düşük bellek limiti, ağır eklentiler, büyük veri işlemleri veya uygulama kaynaklı bellek tüketimi başlıca nedenler arasındadır.

WordPress PHP memory limit kaç MB olmalı?

Tek bir doğru değer yoktur. 128M temel siteler için başlangıç seviyesi olabilirken, 256M birçok standart WordPress kurulumu için daha geniş alan sağlar. WooCommerce ve yoğun kaynak kullanan uygulamalarda daha yüksek değerlere ihtiyaç duyulabilir. Nihai değer sunucu kaynakları ve uygulamanın gerçek kullanımına göre belirlenmelidir.

WP_MEMORY_LIMIT ile memory_limit aynı şey midir?

Hayır. memory_limit PHP'nin genel bellek sınırını belirler. WP_MEMORY_LIMIT ise WordPress'in PHP için talep ettiği bellek miktarını ifade eder. WordPress, sunucunun izin verdiği sınırın üzerine çıkamaz.

PHP memory_limit değerini -1 yapmak doğru mudur?

-1 değeri PHP için bellek limitini kaldırır. Ancak özellikle paylaşımlı hosting ve üretim sunucularında kontrolsüz bellek tüketimine neden olabileceğinden genellikle önerilmez. Bunun yerine ihtiyaca uygun, kontrollü bir limit belirlenmelidir.

Bellek limitini artırdığım halde hata devam ediyorsa ne yapmalıyım?

Öncelikle değişikliğin doğru PHP sürümüne ve alan adına uygulandığını kontrol edin. Ardından error log kayıtlarını inceleyerek belleği tüketen dosya veya işlemi tespit edin. Sorun devam ediyorsa eklenti, tema, PHP-FPM ve sunucu RAM kullanımını birlikte değerlendirin.

Bu hata web sitesinin tamamen kapanmasına neden olur mu?

Hata, bellek sınırını aşan PHP isteğinin başarısız olmasına neden olur. Sorun belirli bir sayfayı veya yönetim panelindeki bir işlemi etkileyebileceği gibi, sitenin önemli bölümlerinin kullanılamamasına da yol açabilir. Etkinin kapsamı hatanın hangi işlemde oluştuğuna bağlıdır.

Sonuç

PHP Allowed Memory Size Exhausted hatası, web sitenizin PHP işlemleri için ayrılan bellek sınırının yetersiz kaldığını gösterir. Sorunu çözmek için cPanel üzerinden memory_limit değerini artırabilir, WordPress yapılandırmasını kontrol edebilir veya VPS sunucunuzdaki PHP-FPM ve RAM kullanımını inceleyebilirsiniz.

Ancak kalıcı çözüm için yalnızca bellek limitini yükseltmek yerine soruna neden olan eklenti, tema, sorgu veya uygulama işlemini belirlemek önemlidir. Doğru yapılandırılmış bir PHP ortamı ve ihtiyaca uygun sunucu kaynakları, web sitenizin daha kararlı çalışmasına yardımcı olur.

Web sitenizin kaynak ihtiyacına uygun altyapıyı değerlendirmek için TuemCloud çözümlerini inceleyebilir, sunucu ihtiyaçlarınıza uygun hizmet hakkında bilgi alabilirsiniz.