Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: Internet Information Services
PHP'yi çalıştırırken bazen bir hata koşulunu tanılamak için bir hata sayfasını incelemek mümkün değildir. Bu hata şu durumlarda oluşabilir:
- Hangi URL'nin hatayla karşılaştığını bilmiyorsunuz.
- Hata aralıklı olarak gerçekleşir ve bunu el ile yeniden oluşturamazsınız (hata, kullanıcı girişine veya seyrek gerçekleşebilecek dış çalışma koşullarına bağlı olabilir).
- Hata yalnızca üretim ortamında oluşur.
Bu gibi durumlarda, hatanın ne olduğunu tanımlamak zordur ve tanılamak daha da zordur. İstek günlüklerini veya hata günlüğünü inceleyerek hangi URL'lerin hataya neden olduğunu belirleyebilirsiniz, ancak yine de hatanın neden olduğunu belirleme konusunda sorun yaşayabilirsiniz.
Internet Information Services (IIS), belirli isteklerin ayrıntılı yürütme izlemelerini otomatik olarak yakalayan hata tanımları oluşturmanızı sağlayan Başarısız İstek İzleme ile bu zor hata koşullarını izlemeyi ve tanılamayı kolaylaştırır. Bkz . IIS'de izlemeyi kullanarak Başarısız İsteklerin Sorunlarını Giderme ve Yeniden yazma kurallarını izlemek için Başarısız İstek İzleme'yi kullanma.
PHP tanılamalarına yardımcı olmak için bu izlemeler, istek giriş verilerini ve PHP'den gelen yanıt verilerini yakalamak için de yapılabilir. Bu, bu hata koşullarını tanılamak için gereken içgörüleri sağlayabilir.
Oldukça yaygın bir uygulama sorunu da, yoğun kaynak kullanan bir döngüye yanıt vermemeye veya bu döngüye giren koddur. Bunun nedeni genellikle aşağıdakiler olabilir:
- Bir dosya veya ağda engelleyici G/Ç işleminin tamamlanması, örneğin uzak bir Web hizmetine veya veritabanına erişirken uzun sürer.
- Kodun sonsuz (veya uzun süre çalışan) bir döngüye girmesine neden olan bir hata var ve bu da cpuyu döndürüyor veya belleği ayırıyor olabilir.
- Kod, paylaşılan bir kaynakta veya kilitte kilitleniyor veya kilitleniyor.
Bu koşullar, isteği yapan kullanıcının uzun bekleme sürelerine veya zaman aşımlarına neden olur ve koşullar uygulamanın ve hatta sunucunun tamamının performansını olumsuz etkileyebilir.
IIS, şu anda yürütülmekte olan istekleri inceleyerek hangi isteklerin asılı olduğunu belirlemek için hızlı bir yol sağlar.
Bilinmeyen veya yeniden oluşturması zor hataları tanılamak için Başarısız İstek İzleme'yi kullanma
Başarısız İstek İzleme, iis modüllerinden gelen istek, yanıt ve izleme olaylarının zenginliği hakkındaki ayrıntıları inceleyerek aralıklı veya yeniden oluşturması zor hata koşullarını izlemenin ve hata koşullarını tanılamanın etkili bir yolu olabilir.
Başarısız İstek İzleme bir üretim ortamında kullanılabilir çünkü yalnızca belirli hata tanımını karşılayan izleme isteklerini izlemek üzere yapılandırılabilir ve başarılı istekler için izleme ek yükünün çoğunu önleyebilir.
Bir sitede Başarısız İstek İzleme'yi etkinleştirmek için (bu örnekte TroubleshootingPhp kullanıyoruz), aşağıdaki adımları kullanın:
IIS Yöneticisi'ne geçin. Kapalıysa Başlat'ı ve ardından Internet Information Services (IIS) Yöneticisi'ni seçin.
Sunucu düğümünü genişletin ve ardından Siteler düğümünü genişletin.
Soldaki ağaç görünümünde sitenizin adını bulun ve seçin.
IIS'nin altında Başarısız İstek İzleme Kuralları'ne çift tıklayın.
Eylemler panelinde Site İzlemeyi Düzenle'yi seçin.
Etkinleştir onay kutusunu seçin.
Tamam'ı seçin.
Şimdi Başarısız İstek İzleme kuralı oluşturun. Eylemler panelinde Ekle'yi seçin.
Tüm içerik seçeneğini seçili bırakın.
İleri'yi seçin.
Durum kodları'na400-999 girin.
İleri'yi seçin.
Varsayılan izleme sağlayıcılarını etkin bırakın ve son'u seçin.
Artık istekte bulunabilirsiniz. Bu adımlar için, isteklerin sitenizin diğer kullanıcıları tarafından yapıldığını ve onların isteklerini veya yanıtlarını bilmiyor olduğunuzu varsayalım. Örneğin, Internet Explorer'ı kullanarak aşağıdaki istekleri yapın:
- İstek
http://localhost:84/hello.php
- İstek
http://localhost:84/products.php?productid=3
- İstek
http://localhost:84/products.php?productid=5
(bu sayfa bir hata oluşturur)
- İstek
Başarısız istek izlemesini bulun:
Başlat'ı ve ardından Komut İstemi'ni seçerek Komut İstemi penceresini açın.
Sitemiz için oluşturulan izleme günlüklerini listelemek için aşağıdaki komutu çalıştırın:
%windir%\system32\inetsrv\appcmd.exe list traces /site.name:"TroubleshootingPhp"
Şuna benzer bir çıkış elde edersiniz:
TRACE "troubleshootingPhp/fr000001.xml" (url:http://localhost:84/products.php?product=5,statuscode:500,wp:2864)
Çıkış, isteği için bir
/products.php?product=5
izleme günlüğü oluşturulduğunu ve bunun sonucunda BIR HTTP 500 hatasına neden olduğunu gösterir. Size şunu söyler:- Products.php sayfası bir hataya neden oldu.
- Hataya neden olan giriş büyük olasılıkla
product=5
, diğer sorgu dizeleri için hataları görmediğiniz için olur (bu sayfaya sık sık erişilirse bu sonuç daha doğru olur; bu durumda yalnızca bu sorgu dizesi için birden çok hata görürsünüz).
Artık istek ve hatanın olası nedeni hakkında daha fazla bilgi toplamak için belirli bir izleme günlüğü alabilirsiniz. Bunu yapmak için komut isteminden aşağıdaki komutu çalıştırın (önceki çıktıdaki izleme günlüğünün tırnak içinde belirtilen kimliğini kullanarak):
%windir%\system32\inetsrv\appcmd.exe list traces /site.name:"TroubleshootingPhp" /text:*
Bu, aşağıdakine benzer bir çıkışa sahip olmalıdır:
TRACELOG TRACE.NAME:" troubleshootingPhp/fr000001.xml" PATH:"C:\inetpub\logs\FailedReqLogFiles\W3SVC2\fr000001.xml" URL:"http://localhost:84/products.php?product=5" STATUSCODE:"500" SITE.ID:"2" SITE.NAME:"TroubleshootingPhp" WP.NAME:"2864" APPPOOL.NAME:"TroubleshootingPhp" verb:"GET" remoteUserName:"" userName:"" tokenUserName:"NT AUTHORITY\IUSR" authenticationType:"anonymous" activityId:"{ 00000000-0000-0000-1400-0080000000FA }" failureReason:"STATUS_CODE" triggerStatusCode:"500" timeTaken:"100" xmlns:freb:"http://schemas.microsoft.com/win/2006/06/iis/freb"
İzleme günlüğünü inceleyin. Önceki çıkışta belirtilen yolu kullanarak tarayıcıda izleme günlüğü dosyasını açın (bu örnekte C:\inetpub\logs\FailedReqLogFiles\W3SVC2\fr000001.xml). Özet sekmesi istek hakkında temel bilgiler sağlar. Hata durumunun FastCGIModule tarafından ayarlandığını görebilirsiniz ve bu da hatanın PHP'den geldiğini gösterir. Diğer durumlarda, hatanın diğer IIS modüllerinden geldiğini görebilirsiniz; bu durumda nedenini belirlemek için günlükteki izleme bilgilerinin zenginliğini kullanabilirsiniz. Ancak bu durumda, hata hakkında daha fazla içgörü elde etmek için PHP tarafından oluşturulan yanıtı görmeniz gerekir.
Sıkıştırılmış Görünüm sekmesini seçin. Bu sekme, isteğin işlenmesi sırasında IIS ve IIS modülleri tarafından oluşturulan izleme olaylarının ayrıntılı listesini gösterir.
Not:
- GENERAL_REQUEST_START olay istek URL'si, fiili, site hakkındaki çalışma zamanı bilgileri ve isteğin gönderildiği uygulama gibi bazı temel bilgileri gösterir.
- GENERAL_REQUEST_HEADERS olay, bazı durumlarda hangi kullanıcı girişinin hataya yol açabileceğini belirlerken önemli olabilecek üst bilgilerin tam listesini verir.
- GENERAL_RESPONSE_HEADERS ve GENERAL_RESPONSE_ENTITY_BUFFER olayları, istemciye gönderilen tam yanıt üst bilgilerini ve yanıt gövdesini sağlar. Bu durumda, yanıt gövdesi hatayı tanılamak için gereken ek bilgileri sağlar ve yanlış ürün kimliğini gösterir.
İzleme günlüğünü incelerken göz önünde bulundurmanız gereken diğer bölümler şunlardır:
- İstek Özeti paneli isteğin özetini, sonucunu sağlar ve ayrıca istek yürütme sırasındaki uyarı veya hata olaylarını vurgular.
- İstek Ayrıntıları paneli, istek yürütmeye ilişkin hiyerarşik bir görünüm sağlar ve olayları Modül bildirimleri, Kimlik Doğrulaması/Yetkilendirme gibi çeşitli kategorilere göre filtrelemenize de olanak tanır. Ayrıca, yürütmenin hangi bölümlerinin en uzun sürdüğünü anlamanıza yardımcı olan Performans Görünümü'nü de sunar.
- Sıkıştırılmış Görünüm, istek yürütme hakkında çok sayıda bilgi de dahil olmak üzere olayların tam listesini sunar. IIS modüllerinin çoğu, yürütmeleri hakkında istek işlemenin çeşitli yönlerini ve sonucu anlamak için kullanılabilecek bilgiler üretir. BU bilgiler, URL yeniden yazma veya kimlik doğrulaması gibi karmaşık etkileşimlerle ilgili sorunları giderirken çok değerli olabilir.
Geçerli isteklerin yürütülmesini inceleyerek asılı istekleri bulma
Bu, IIS'de şu anda yürütülen istekleri inceleyerek hangi isteklerin asılı olduğunu belirlemek için hızlı bir yol sağlar.
Programlama hatası nedeniyle sonsuz döngüye giren bir sayfa istediğinizi varsayalım. İzleyen adımlarda bu sayfa loop.php. Görev yöneticisinde Php-cgi.exe meşgul olduğunu ve CPU'nun yüzde 100'e yakınını tüketildiğini görebilirsiniz (birden çok CPU çekirdeğiniz varsa, işlemin toplam CPU'nun 1/# çekirdeğini tüketildiğini görürsünüz). Hangi isteğin asılı olduğunu belirleyebilirsiniz:
Başlat'ı ve ardından Internet Information Services (IIS) Yöneticisi'ni seçin.
Soldaki ağaç görünümünde Sunucu düğümünü seçin.
IIS altında Çalışan İşlemleri'ne çift tıklayın.
Uygulama Havuzu Adı'nın altında uygulama havuzunuzun adına çift tıklayarak İstekler görünümünü açın. (Bu örnekte Sorun GidermePhp'tir.)
Web tarayıcısına geçin ve sayfa zaman aşımına uğradıysa sayfayı yenileyin. Bu adımların tamamında yapılması gerekebilir. IIS Yöneticisi'ne geri dönün ve İstekler görünümünü yenileyin.
Şu anda yürütülmekte olan isteklerin listesini gözlemleyin ve bu örnekteki /loop.php sorun sayfasına yönelik isteği gösterir. İstek girişi şunları gösterir:
- İsteğin bir süredir yürütülmekte olduğunu (Geçen Süre).
- İsteğin URL'si (bu örnekte , /loop.php).
- Modül adı (FastCGIModule).
- Yürütme aşaması (ExecuteRequestHandler).
Aynı isteğin aynı aşamada yürütülmeye devam ettiğini gözlemlemek ve asılı isteği işaret etmek için görünümü birkaç kez yenileyebilirsiniz.
Komut istemini kullanarak hangi isteğin asılı olduğunu belirleyin. Komut istemiyle, belirli bir uygulamaya veya belirli bir URL'ye yönelik istekler gibi ilgi çekici istekleri filtreleyebilirsiniz. Şu anda yürütülen istekleri izleyen betikleri otomatikleştirmek için kullanılabilir. Başlat'ı ve ardından Komut İstemi'ni seçerek Komut İstemi penceresini açın.
Web tarayıcısına geçin ve sayfayı yenileyin
http://localhost:84/loop.php
. ( loop.php örnek bir ad olduğunu unutmayın; sayfanızın adı kullanılmalıdır.) Aşağıdaki adımlar için bu sayfayı sürekli yenilemeniz gerekebilir. Komut istemine geçin.Bir saniyeden uzun süredir yürütülen istekleri listelemek için aşağıdaki komutu çalıştırın:
%windir%\system32\inetsrv\appcmd.exe list requests /elapsed:1000
Aşağıdakine benzer bir çıkış elde edersiniz ve loop.php yerine sayfa adınızı alırsınız:
REQUEST " fa000000080000026" (url:GET /loop.php, time:2840 msec, client:localhost, stage:ExecuteRequestHandler, module:FastCgiModule)
Kullanılabilir istek özniteliklerine göre herhangi bir sayıda ölçüt belirterek döndürülen istekleri filtreleyin. Örneğin, yalnızca belirli bir URL'ye yönelik istekleri göstermek için:
%windir%\system32\inetsrv\appcmd.exe list requests /url:/loop.php /elapsed:1000
AppCmd komut bağlamasını kullanarak daha karmaşık sorgular gerçekleştirebilir, örneğin uzun süre çalışan istekleri olan tüm uygulamaları belirleyebilirsiniz:
%windir%\system32\inetsrv\appcmd.exe list requests /elapsed:1000 /xml | %windir%\system32\inetsrv\appcmd list apps /in
Aşağıdakine benzer uygulamaların listesini alırsınız:
APP "troubleshootingPhp/" (applicationPool:troubleshootingPhp)
Geçerli istek verilerini temel alan bir eylem gerçekleştirme örneği aşağıda verilmiştir: Uygulama havuzlarını beş saniyeden uzun süredir yürütülen isteklerle geri dönüştürme:
%windir%\system32\inetsrv\appcmd.exe list requests /elapsed:1000 /xml | %windir%\system32\inetsrv\appcmd list apppools /in /xml | %windir%\system32\inetsrv\appcmd recycle apppools /in
Uygulamanızın adıyla aşağıdaki çıkışı alırsınız:
"TroubleshootingPhp" successfully recycled