Mod_php bellek kullanımını ayıklama

1 Cevap php

Ben bazen izin verilen maksimum bellek kullanımı (yani php.ini in memory_limit tanım) ötesine genişletir apache / mod_php çalışan bir isteği işleyicisi var.

Bu isteğini ele dış komutları çalıştırmak için () proc_open çağırır. Bu komutların bellek kullanımı istekleri bellek kullanımı "karşı" sayılır mı?

Bunun ötesinde, mod_php altında çalışan komut bellek kullanımını analiz etmek ve düzeltmek için tercih yolları nelerdir? Php bellek kullanımı etrafında buldum tüm bilgiler gibi görünüyor:

  • "Düzen php.ini ve hafıza limitini yükseltmek!"
  • "Apache config düzenleyin ve daha düşük bir sayıya çocuk başına maksimum istekleri set!"

Açıkçası bu iki performans ve istikrar üzerinde olumsuz bir etkisi olabilir. Nasıl aslında bant yardım yerine, analiz etmek ve sorunu çözebilirsiniz?

Apache gibi hata günlükleri:

PHP Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes) in foo.php on line Z

1 Cevap

PHP'nin bellek yönetimi konusunda benzer bir soru sordu: http://stackoverflow.com/questions/849549/detecting-memory-leaks-in-large-php-stacks

I exec () veya proc_open harici çalışan programları () php bellek sınırı karşı sayılmaz oldukça eminim.

PHP bellek kullanımını izleme görünüşte çok zordur. Bir sembol tablosunu veya böyle bir şey aramak için bir yol olarak görünmüyor.

PHP memory_get_usage() and memory_get_peak_usage() , that can fetch the total amount of memory used at any given point in your script. You could bellek parçalayıcılar bulmak için anahtar noktalarda, ad-hoc, kendi izleme komut yazmak ve koyun gibi, bir çift bellek yönetimi fonksiyonları vardır .

Kod-yığını ne kadar büyük bağlı olarak, xdebug en execution trace en iyi bahis olabilir. Eğer çok fazla kod varsa Ama bu overkill olabilir.