Benim PHP uygulama çok fazla bellek kullanarak olup olmadığını nasıl anlarım?

4 Cevap php

Ben kullanıcıları birbirlerine, kitap etkinlikleri, ve mesajın birbirinden ile ağ izin bir PHP web uygulaması üzerinde çalışıyorum. Sadece yaklaşık 100 kullanıcı var.

Ben Ubuntu 9.10, apache2, mysql 5 ve php 5 ile bir VPS üzerinde uygulama kurmak. Ben RAM 360 Mb vardı, ancak 720 MB'a yükseltilmiş.

Son zamanlarda, benim web uygulaması aşırı bellek kullanımı nedeniyle kesintileri yaşanmaktadır. Ben hata günlükleri ne söyleyebilirim, bu sunucu otomatik olarak çok fazla bellek tüketiyor apache süreçleri öldürür görünüyor. Sonuç olarak, ben 360 MB bir stop-gap tedbir olarak 720 MB bellek yükseltti.

Yani benim soru nasıl bu kesintisi sorunları çözme hakkında gitmek mi, nedir? Daha fazla bellek için benim web sitesi ihtiyacı bu web sitesinin doğal büyüme parçası ise kötü kod nedeniyle ya olmadığını nasıl anlarım? PHP betikleri en bellek tüketmek belirlemek için en etkili yolu nedir?

4 Cevap

Ben sizin kodda bir sorun olabilir şüpheli olsa da, bu basit bir cevabı var,.

Php.ini dosyasındaki memory_limit ayarı nedir? Genellikle ben Kaç eşzamanlı hit Fielding en az 4MB, ve genellikle 16. Tavsiye ederim? Site istatistikleri ağır raporlama bir sürü yapıyor? Ya da PHP ile görüntü render? Eğer herhangi bir yerde file_get_contents () kullanıyor musunuz?

Eğer gerçekten her URL için rapor için bazı özel günlüğü kurmak gerekir, çıkışta günlük dosyasının boyutu. örneğin Otomatik-prepend olabilir:

<?php
register_shutdown_function('log_mem');

function log_mem()
{
   fputs(STDERR, '[' . date('c') . '] ' . memory_get_usage() . ' ' 
     . $_SERVER["REQUEST_URI"] . "\n");
}

(Note - no closing tag) This will write out the memory used by each PHP page to the error_log so you can isolate the problem more easily.

HTH

C.

Lütfen işlem boyutu küçük ise Yapabileceğiniz başka bir şey, sadece 100 kullanıcıları varsa min 1 yedek sunucular, ve 3. Max yedek sunuculara sahip httpd ayarlarını kapatmanız olduğu umurumda değil gibi, bu, ince olmalı Sadece birkaç kullanıcılar için süreçleri başlangıç ​​yükü hakkında.

http://xdebug.org/docs/profiler: İşte profil PHP destekleyen bir araçtır

Httpd sürümüne & bağlı php, httpd gerekmez bellek segents tutarak, ve unnecesarily çalışan süreç boyutu büyüyor olabilir. Bunu yapan bir kutu var, ve ben bu yüzden gibi bir gece olarak bir httpd restart yaparak sorunu çözdük:

30 00 * * *     /httpd/sbin/apachectl restart
31 00 * * *     /httpd/sbin/apachectl start
35 00 * * *     /httpd/sbin/apachectl start
40 00 * * *     /httpd/sbin/apachectl start

Gördüğünüz gibi, ben dava apache yeniden başlattıktan sonra hayata geri gelmek için başarısız sadece içinde, 3 eğik başlar benim yeniden takip. 3 muhtemelen overkill, ancak diğer yandan, hiçbir şey zarar vermez, yani neden olmasın.