PHP Bellek sınırını artırın (Apache, Drupal6)

6 Cevap php

Ben bir hosting sunucu üzerinde bir Drupal kurulum çalıştırmak çalışıyorum. (Ben sadece bir sağlayıcıya abone kulüpler - Ben kutuyu sahibi ben değilim.)

Ben Apache sunucu için PHP bellek limitini artırmak gerekir. Ben denedim

ini_set('memory_limit', '64M');

settings.php (her istekte bulunan bir dosya), ancak bu Internal Server Error 500 neden ben bunu alırsak, ben bu hatayı alıyorum.:

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 19456 bytes)...

Yan soru:. 19456 az 33.554.432 Neden bu izin boyutu bitmiş olduğunu söyleyerek mi?

. Ben de üzerinde htaccess bu koyarak çalıştı:

 php_value memory_limit 				128M

Bu, herhangi bir etkisi yoktu.

6 Cevap

Eğer alıyorsanız hata iletisi:

Allowed memory size of 33554432 bytes exhausted (tried to allocate 19456 bytes)

Eğer kullanmak için izin 33554432 bayt daha ayırmaya çalışırken belirtir; yani 32 MB:

; 33554432/1024/1024
        32

PHP 19 Kbyte tahsis tryied zaman başarısız tahsisi olduğunu gösterir; ama there had already been almost 32MB allocated - toplam en az 32 MB olduğu gibi bu ödenekleri, başarısız olmadı.

Hata iletisinin "19456 bayt" bölümü gerçekten alakalı ne değildir: ne alakalı sizin memory_limit 32 MB olarak ayarlanmış olmasıdır.


Considering the memory_limit is some kind of security, it would be strange that your hosting provider allows you to change its value...

Eğer hosting üzerinde iseniz, bu olmaz ... Hangi sunucuda herkes istedikleri bellek herhangi bir miktarda almak anlamına gelecektir o güzel aynı sunucu üzerinde diğer kullanıcılar için!

BTW : 32MB is actually a quite reasonable value -- I've never seen a server configured to allow more than 32 MB for a web application... And the default value for PHP 5.2 seems to be 16 MB, according to the manual.
(And I've been working with Drupal for a couple of months)


About the error 500, I don't have a lot of ideas... One possibility might be that the safe_mode is activated, and that it doesn't allow setting the memory_limit at execution time.

Manuel bu konuda çok şey söylemek görmüyor, ama bilgi biraz altında max_execution_time yönergesi vardır:

You can not change this setting with ini_set() when running in safe mode. The only workaround is to turn off safe mode or by changing the time limit in the php.ini.

Ben aynı memory_limit hakkında doğru olduğunu varsayalım; zaten, mantıklı görünüyor.

Php.ini dosyasında koy. Apache yeniden ana sorun. Drupal.org üzerine This düğüm nasıl yapılacağını size yürüyor. Eğer barındırma paylaşılan varsa, drupal.org üzerinde daha popüler sağlayıcıların çoğu için php.ini değiştirmek için nasıl adım adım kılavuzları vardır. Sadece arama "PROVIDER_NAME artış bellek sınırı."

Daha sonra ben yeni bir ana şirket arıyor öneririz, onlar gibi, sadece onlar bunu artırmak değil eğer, bunu değiştirmek mümkün olacaktır izin ne kadar hafıza hosting şirketi ile doğrulamak gerekir.

Drupal gelince Ancak, eklemek için doğru olduğunu

ini_set('memory_limit', 'xxxM');

settings.php dosyasına. (Xxx = gerekli bellek)

Drupal başarısız kasalar bir yeri vardır, bu onlardan biridir ve drupal hafıza yorucu sizi durdurur.

Yani hosting şirketi ile kontrol, artan ve settings.php dosyasında memory_limit set olsun.

Ben genellikle sadece script çok altında bu satırı eklemek, ama sen gerçekten her yerde ekleyebilirsiniz.

Benzer bir sorunu vardı ve Drupal bu çözmek için çeşitli yöntemler vardı diğer insanlar için bu okuyun.

http://drupal.org/node/29268

İyi şanslar

Bu işe yaramazsa neden sağlayıcınıza sorun. Ben sadece size (Yani neden olabilir istemek bellek miktarını yok kullanabilirsiniz ve herhangi bir yüksek ayarlanmış olması, ya da bir sanal konağın içinde çalışan izin vermez bellek miktarını sınırlı tahmin ediyorum hata 500).

Onlar aynı makinede diğer sitelerden hafızayı hogging paylaşılan bir kutuyu bir site istemiyorum gibi birçok hosting sağlayıcıları, PHP'nin hafıza limitini yükseltmek için izin vermez. Ben hosting sağlayıcınızın SSS okuma ve etajer PHP ile ilgili tavsiye ederim, böyle bir sınırlama var sayabiliriz.

Side question: 19456 is less than 33554432. Why is it saying that allowed size is exhausted?

Tüm ayırma istekleri arasında gerçek toplam - küçük sayı toplam ayrılan tutar sınırı geçmesine neden isteği sadece boyutudur. 33540000 byte zaten tahsis edildi ve boyutu 19456 başka amacı istendi Yani, o zaman bu mesajı almak istiyorum.

Apache: Eğer memory_limit ayarını ve maksimum değerden daha az bellek hataları dışında alıyorsanız, tek suçlu sürecini yumurtlama yukarı sistemi yatıyor.

Apache yapılandırmasında (/usr/local/apache/conf/httpd.conf), isteklerini (ve Drupal gibi süreçlerde çalışan) işlemek tüm alt süreçler için bir üst sınır ayarlar bir yönergeyi bulacaksınız. Belirli bir Apache sunucu birden müşteriler (siz ve diğer bazı sayısı) işleyebilir. Onlar bir müşteri tüm belleği domuz izin verdiyseniz, herkes bir BadTime (tm) sahip olacaktır. Bu durumu önlemek için, her tür işlem olabilir ne kadar bellek kap olacak.

Örneğin:

# rlimits, do not modify
#  Setting single-process size 
#RLimitMEM 85643200 104857600
RLimitMEM 134217728 537395200

İşte, benim barındırma hizmeti tarafından belirlenen orijinal değerlerini yorumladı ve bunları artırdık.

Eğer paylaşılan bir sunucuda iseniz Tabii ki, o zaman bu yapılandırmayı değiştirebilirsiniz son derece düşüktür. Aslında bu büyük olasılıkla ev sahibi kuruluşu değiştirecek yapılandırma.

FWIW, Host Gator size işlem başına ~ 80MB vermek gibi görünüyor. PHP zamanı ~ 16MB almak gibi görünüyor.