Asılı php hata ayıklama

5 Cevap php

Ben bazen asılı bir php web uygulaması var. Ben sayfaya gittiklerinde sadece max yürütme 210 olsa bile, saatlerce yüklemeye çalışıyor orada oturacak. Bu uygulama şeyler indirmek için bir proxy arkasında kıvırın kullanır. Hata raporlama tüm ayarlanır, ancak sayfanın beri bu Dosnt madde boş ve asılır.

Ben asılı PHP işlem hata ayıklama şey bulamıyorum.

5 Cevap

I, HTTP / IO işlemleri dışında php zaman olur, kontrol böylece olası CURL ölüyor ya da zamanlama olduğunu son.

Onun IO, bu yüzden php sadece bazı sistem kütüphanede dışarı atar ve daha sonra geri gelmek için beklemek "seçeneğini seçin" diyor.

Geri gelmez .. Eğer php kod bile loop olması ve böylece alışkanlık hatta onun geri dönmeyecek biliyorum olmaz.

perde arkasında neler olduğunu görmek için, sen XDebug yükleyebilir, ardından görmek için kullanabileceğiniz .... KCacheGrind / etc ile uyumlu dosya sistemine (? XDEBUG_PROFILE = 1) ... bu çıkışı olacak bir günlük tetiklenmiş profil etkinleştirmek yürütme asılı olduğu.

Tabii, bu büyük olasılıkla bir kıvrılma konudur ....

i bir kıvrılma sorunu olan para bahse girerim. i vesilesiyle senaryoyu asılı i eklenen belirli bir kıvırmak seçeneği ile birkaç yıl önce benzer bir sorun vardı. i sorunu oldu tam olarak hatırlamıyorum isterdim, ama ben kıvırmak altında yanlış bir kütüphane bağlantı olduğu varlık sona erdi inanıyorum. (edit), aslında, ben o curl openssl eski bir sürümünü kullanarak, benim durumumda SSL kütüphane oldu eminim.

Ben hatayı izole görmek için geri ekleyerek, daha sonra tüm curl_setopt() şeyden önce çağırır kaldırarak öneririm. Eğer komut satırında eşdeğer curl komutu çalıştırdığınızda i think, hemen orada hata görebilirsiniz.

i openssl kütüphanesi kıvırmak kullanan güncelleyerek düzelttim.

Xdebug harika bir fikir olduğunu ve yardım etmezse, ben de ktrace, strace veya makas aracılığıyla web sunucusu çalışıyor tavsiye ederim. Bu does tam olarak ne gösterir ve onu asılı olabilir nerede.

Orada geçici bir bağlantı sorunu, ya da uygulama dayanan başka bir şey engellenir gibi geliyor.

Apache kullanmak durumda, Apache HTTP Debugging Guide kontrol edin. Kılavuz biraz * nix-merkezli olduğunu, ancak herhangi bir web sunucusu uygulanabilir.

Proxy her zaman yukarı / duyarlı ve indirme kaynağı her zaman mevcut olduğu takdirde web sunucusu hata ayıklama üstüne, ben de denetimler ekleyerek tavsiye ederim. Bu kontroller nagios gibi bir aracı ya da Pingdom gibi bir 3. parti hizmeti kullanılarak eklenebilir. Eğer vekil ve yükleme kaynağına bağlanmak ve / veya DNS hizmeti için izleme eklemek için IP'ler kullanma hakkında gitmek böylece son ama en az değil, aynı zamanda geçici bir DNS sorunu olabilir.

HTH

Bu topal ses olacak, ama sadece / tmp / debug.txt için fwrites yapmaya başlayabilirsiniz, sonra sayfa isteği çok başında bir dosya tanıtıcısı açılmaktadır. Son bir yazılı alır nerede olduğunu görmek ve o bölgede dosyası içine çeşitli değişken değerleri üzerinden yankılanan başlar. Daha ince ve kod üzerinde çözünürlük ince bölümlere fwrites dağıtmak için ikili arama teorisini kullanın.

i.e.

$fh = fopen("/tmp/debug.txt", "w");

fwrite($fh, "made it to here 1 \n");

//some code

fwrite($fh, "made it to here 2 \n");

//more code

fwrite($fh, "made it to here 3 \n");