PHP kodu yavaşlıyor nerede bulun (Performans Sayı)

11 Cevap php

İşte benim ilk soru SO bulunuyor.

Geçenlerde korumak için sormak oldum benim şirket için bir iç uygulama var. Uygulamalar PHP inşa ve oldukça iyi kodlanmıştır (OO, DB Soyutlama, Smarty) hiçbir şey WTF-ish.

Sorun uygulamaları vardır very slow.

Uygulamaya nasıl neyin yavaşlattığını bulmaya gidiyorsun? Ben çok az DB sorguları yapmak için kodu optimize ettik, bu yüzden yürütmek için bir süre alıyor PHP kodu olduğunu biliyoruz. Ben bu konuda bana yardımcı ve benim kodu kontrol etmek için bir strateji geliştirmek için gereken bazı araçları almak gerekiyor.

Ben kontrol / strateji kendimi işe yapabilirim, ama benim app kirletiyorsun nerede anlamaya daha PHP araçlara ihtiyaç duyar.

Düşünceler?

11 Cevap

Ben benzer bir durumda yakın zamanda XDebug profiling kullandım. O (Ben sadece Slackware'de ile geldi bir kullanmış olsa bir liste vermek olamaz) birçok ortak profil uygulamaları ile okunabilir tam bir profili raporu verir.

Juan belirtildiği gibi, xdebug mükemmel. Windows üzerinde iseniz, WinCacheGrind Eğer raporlar üzerinde görünmesini sağlayacaktır.

Rasmus Lerdorf (PHP yaratıcısı) tarafından bu sunumu izleyin. O test PHP hız ve ne için bakmak gibi şeyler yavaşlatabilir bazı internals için bazı iyi örnekleri gider. XDebug o kullandığı bir araçtır. O da çerçeveler içine alıyoruz ne performans maliyeti bilerek hakkında çok sağlam bir nokta yapar.

Video: http://www.archive.org/details/simple_is_hard

Slides (since it's hard to see on the video): http://talks.php.net/show/drupal08/1

Uygulamanızın performansını etkileyebilir birçok değişken vardır. Ben anında PHP sorun olduğunu düşünmeyin öneririz.

İlk olarak, nasıl PHP hizmet vermekteyiz? Apache veya IIS kendisi temel optimizasyonu denediniz mi? Sunucu isteklerini diğer türlü işlem meşgul? Bir PHP code accelerator yararlanmaktadır? Sunucu tıkanıklık olup olmadığını test etmek için tek yolu, başka bir sunucu üzerinde uygulama çalıştıran çalışmaktır.

İkincisi, tüm uygulama performansı yavaş, ya da sadece belirli sayfaları etkileyecek gibi görünüyor? Bu size performans analiz başlamak için nerede bir göstergesi verebilir. Tüm uygulama yavaş ise, sorunun temel sunucu / platform veya (örneğin kullanıcı kimlik doğrulama,) her istek parçası olan küresel bir SQL sorgusu ile daha olasıdır.

Üçüncü olarak, SQL sorguları sayısını en aza indirerek söz, ama ne varolan sorguları optimize hakkında? Eğer MySQL kullanıyorsanız, her bir depolama sisteminin çeşitli güçlerinden yararlanarak? Eğer düzgün endeksli olduğundan emin olmak için en önemli sorguları EXPLAIN çalıştırmak? Bu büyük tablolar erişmek sorgularında önemlidir; veri kümesi büyük, daha fakir indeksleme etkilerini göreceksiniz. Neyse ki, EXPLAIN nasıl kullanılacağını açıklamak çok sayıda makale such as this one vardır.

Dördüncü, ortak bir hata veritabanı sunucusu otomatik olarak sisteme mevcut tüm kaynakların kullanmak farz etmektir. Eğer açıkça veritabanı uygulaması için yeterli kaynak tahsis emin olmak için kontrol etmelisiniz. MySQL, örneğin, vb anahtar tampon, geçici bir tablo boyutu, iplik eşzamanlılık, innodb tampon havuzu boyutu gibi şeyler için (sizin my.cnf dosyası) özel ayarları eklemek isteyeceksiniz

Eğer yukarıdaki çift-kontrol, tüm ettik ve hala darboğaz bulmak için yapamıyorsanız, Xdebug gibi bir kod profiler kesinlikle yardımcı olabilir. Şahsen ben Zend Studio profilcisini tercih, ama zaten Zend Platform yığının kalanı yararlanarak sürece en iyi seçenek olmayabilir. Ancak, benim deneyim PHP kendini yavaş performans kök nedeni olduğunu çok nadirdir. Genellikle, bir kod profiler DB sorguları suçlu daha hassas belirlemenize yardımcı olabilir.

Zaten değilseniz onun bir büyük kod tabanı denemeydi apc IFS.

http://pecl.php.net/package/APC

PhpED (http://www.nusphere.com/products/phped.htm) da büyük hata ayıklama ve profil ve PHP kodu vb saatler, kesme, ekleme olanağı sunuyor. Entegre Profilcinin doğrudan IDE içinde her işlev çağrısı ve sınıf yöntemi bir zaman dökümünü sunuyor. Tarayıcı eklentileri de Firefox veya IE ile hızlı entegrasyon sağlamak (tarayıcısı yani ziyareti yavaş URL, ardından profil düğmesini veya hata ayıklama tıklayın).

Bu uygulama en kodlama çaba konsantre amacıyla yavaş nerede olduğunu işaret içinde çok yararlı oldu; ve o zaman zaten hızlı kodu optimize israf önler. Zend ve Eclipse çalıştı, ben şimdi PhpED kullanım kolaylığı satılan oldum.

Akılda Xdebug ve (DBG'YE ile) PhpED hem web sunucusu karşı ayıklarken yüklü bir ekstra PHP modülü gerektirir ayı. PhpED da çok (bana göre denenmemiş) yerel bir hata ayıklama seçeneği sunuyor.

Profil xdebug kesinlikle gitmek için yoludur. Bir başka ipucu - WincacheGrind iyidir, ama son zamanlarda güncellenmiş değil. http://code.google.com/p/webgrind/ - Bir tarayıcıda kolay ve hızlı bir alternatif olabilir.

Şansı olsa, yine de hala veritabanı bulunuyor vardır. İlgili indeksleri kontrol edin - ve mümkün olduğunca çalışma verilerinin kadar önbelleğe için yeterli hafızaya sahip olduğunu.

Biz Zend Development Environment (windows) kullanın. Biz her satırı idam edildi gibi bellek / cpu / disk etkinliği izlemek için Process Explorer çalışırken hata ayıklayıcı atlama tarafından dün bir bellek kullanımı başak çözüldü.

Process Explorer: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx.

ZDE sayfa istekleri sırasında her işlev çağrısında harcanan zaman gösterecek temel bir performans profiler içerir.

I PEAR Benchmark ve log4php bir arada kullanın.

Dizelerin en azından ben bir Benchmark_Timer nesnenin etrafına sarar bir nesne oluşturmak profil istiyorsanız. Kod boyunca, özellikle şüpheli kod etrafında, $object->setMarker("name"); çağrıları ekleyin.

Sarıcı sınıf günlük bilgileri alır ve log4php yazar bir imha yöntemi vardır. Ben genellikle (birçok sunucu, bir tek sunucudaki bir log dosyasına agrega) syslog'un bu gönderebilirsiniz.

Ayıklama, ben log dosyaları izlemek ve bir şeyleri iyileştirmek için gereken yere görebilirsiniz. Daha sonra üretim, ben log dosyalarını ayrıştırmak ve performans analizi yapabilirsiniz.

Bu xdebug değil, ama her zaman var ve bana kodun herhangi iki infaz karşılaştırmak için yeteneği verir.

PHP uygulamaları onun zaman harcıyor grafiksel göstereceğim bir araç için SD PHP Profiler bakın.

Ayrıca Sen APD (Advanced PHP Debugger) kullanabilirsiniz.

O iş yapmak oldukça kolay.

APD derlemek ve onunla profilleme yapmak için nasıl bir öğretici güzel vardır: http://martinsikora.com/compiling-apd-for-php-54