Aracılığıyla paylaş


ARR'de 502 hatalarını giderme

Bu makale, Uygulama İsteği Yönlendirmesi'ndeki (ARR) 502 hatalarıyla ilgili sorunları çözmenize yardımcı olur.

Şunlar için geçerlidir: Internet Information Services

HTTP 502 - Genel Bakış

IIS Uygulama İsteği Yönlendirme (ARR) dağıtımlarıyla çalışırken, görebileceğiniz hatalardan biri "HTTP 502 - Hatalı Ağ Geçidi"dir. 502.3 hatası, ara sunucu görevi görürken ARR'nin yukarı akış sunucusuna isteği tamamlayamadığı ve istemciye geri yanıt gönderemediği anlamına gelir. Bu sorun birden çok nedenle oluşabilir. Örneğin, sunucuya bağlanılamıyor, sunucudan yanıt alınamıyor veya sunucunun yanıt vermesi çok uzun sürüyor (zaman aşımı). Denetleyiciden web grubuna göz atarak hatayı yeniden oluşturabiliyorsanız ve sunucuda ayrıntılı hatalar etkinleştiriliyorsa, aşağıdaki hata iletisine benzer bir hata görebilirsiniz:

Sunucuda ayrıntılı hatalar etkinleştirildiğinde görüntülenen ayrıntılı 502 hatalarını gösteren ekran görüntüsü.

Hatanın kök nedeni, sorunu çözmek için yapmanız gerekenleri belirler.

502.3 zaman aşımı hataları

ARR, önceki ekran görüntüsündeki hata kodunu kullanarak isteği ara sunucu olarak kullanır ve WinHTTP'dan dönüş kodunu içerdiğinden hatanın kaynağını belirler.

Err.exe araçla hata kodunun kodunu çözebilirsiniz. Bu örnekte hata kodu ERROR_WINHTTP_TIMEOUT eşler. Bu bilgileri ARR denetleyicisindeki ilişkili web sitesinin IIS günlüklerinde de bulabilirsiniz. Aşağıda, 502.3 hatasının IIS günlük girdisinden bir alıntı yer alır ve alanların çoğu okunabilirlik için kırpılır:

sc-status sc-substatus sc-win32-status zaman aldı
502 3 12002 29889

win32 durum 12002, hata sayfasında bildirilen aynı ERROR_WINHTTP_TIMEOUT hatasıyla eşler.

Tam olarak ne zaman aşımına uğradı?

IIS sunucusunda Başarısız İstek İzleme'yi etkinleştirerek bu zaman aşımını deleyebilirsiniz. Başarısız istek izleme günlüğünde görebileceğiniz ilk nokta, isteğin ARR_SERVER_ROUTED olayda gönderildiği yerdir. İkinci nokta, isteği hedef sunucuda izlemek için kullanabileceğiniz X-ARR-LOG-ID'dir. Bu, HTTP isteğinin hedefini veya hedefini izlemenize yardımcı olur:

77. ARR_SERVER_ROUTED  RoutingReason="LoadBalancing", Server="192.168.0.216", State="Active", TotalRequests="3", FailedRequests="2", CurrentRequests="1", BytesSent="648", BytesReceived="0", ResponseTime="15225" 16:50:21.033 
78. GENERAL_SET_REQUEST_HEADER HeaderName="Max-Forwards", HeaderValue="10", Replace="true" 16:50:21.033 
79. GENERAL_SET_REQUEST_HEADER HeaderName="X-Forwarded-For", HeaderValue="192.168.0.204:49247", Replace="true" 16:50:21.033 
80. GENERAL_SET_REQUEST_HEADER HeaderName="X-ARR-SSL", HeaderValue="", Replace="true" 16:50:21.033 
81. GENERAL_SET_REQUEST_HEADER HeaderName="X-ARR-ClientCert", HeaderValue="", Replace="true" 16:50:21.033 
82. GENERAL_SET_REQUEST_HEADER HeaderName="X-ARR-LOG-ID", HeaderValue="dbf06c50-adb0-4141-8c04-20bc2f193a61", Replace="true" 16:50:21.033 
83. GENERAL_SET_REQUEST_HEADER HeaderName="Connection", HeaderValue="", Replace="true" 16:50:21.033

Aşağıdaki örnekte, bunun hedef sunucunun Başarısız İstek İzleme günlüklerinde nasıl görünebileceği gösterilmektedir. Her iki izlemedeki "X-ARR-LOG-ID" değerlerini eşleştirerek doğru isteği bulduğunuzu doğrulayabilirsiniz.

185. GENERAL_REQUEST_HEADERS Headers="Connection: Keep-Alive Content-Length: 0 Accept: */* Accept-Encoding: gzip, deflate Accept-Language: en-US Host: test Max-Forwards: 10 User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0) X-Original-URL: /time/ X-Forwarded-For: 192.168.0.204:49247 X-ARR-LOG-ID: dbf06c50-adb0-4141-8c04-20bc2f193a61 
<multiple entries skipped for brevity> 
345. GENERAL_FLUSH_RESPONSE_END BytesSent="0", ErrorCode="An operation was attempted on a nonexistent network connection. (0x800704cd)" 16:51:06.240

Önceki örnekte, HTTP yanıtı gönderilmeden önce ARR sunucusunun bağlantısının kesildiğini görebilirsiniz. GENERAL_FLUSH_RESPONSE_END zaman damgası, hedef sunucudaki IIS günlüklerinde ilgili girişi bulmak için kaba bir kılavuz olarak kullanılabilir.

tarih time s-ip cs-metodu cs-uri-stem cs-uri-query s-port cs-username sc-status sc-substatus sc-win32-status zaman aldı
2011-07-18 16:51:06 192.168.0.216 GET /Saat/ - 80 - 200 0 64 45208

Hedef sunucudaki IIS, isteğin başarıyla tamamlandığını belirten bir HTTP 200 durum kodu günlüğe kaydetmiş. Ayrıca win32 durumu 64 olarak değiştirilmiştir ve bu durum ERROR_NETNAME_DELETED eşler. Bu durum kodu genellikle istek tamamlanmadan önce istemcinin (bu örnekte 'istemci' olan ARR) bağlantısının kesildiğini gösterir.

Neden

ARR sunucusu, ilk bakmanız gereken zaman aşımını bildirdi.

Üye sunucu günlüğü yanıtın 45 saniye (45208 ms) içinde gönderildiğini gösterse de, ARR sunucusundan IIS günlük girdisi, geçen sürenin 30 saniyeye çok yakın olduğunu gösterir. Bu, ARR'nin istekte zaman aşımına neden olduğunu gösterir ve sunucu grubu proxy ayarlarındaki ara sunucu zaman aşımına bakarak bunu onaylayabilirsiniz. Varsayılan olarak 30 saniye olarak ayarlanır.

Bu durumda, ARR zaman aşımının isteğin yürütülmesinden daha kısa olduğunu açıkça görebilirsiniz. Bu nedenle, bu yürütme süresinin tipik olup olmadığını veya isteğin neden beklenenden uzun sürdüğünü incelemeniz gerekip gerekmediğini denetlemek isteyebilirsiniz. Bu yürütme süresi beklenen ve normalse, ARR zaman aşımının artırılması hatayı çözecektir.

ERROR_WINHTTP_TIMEOUT diğer olası nedenleri şunlardır:

  • ResolveTimeout: Ad çözümlemesi belirtilen zaman aşımı süresinden uzun sürüyorsa gerçekleşir.
  • ConnectTimeout: Ad çözümlendikten sonra sunucuya bağlanmak için belirtilen zaman aşımı süresinden uzun sürerse gerçekleşir.
  • SendTimeout: İstek gönderme işlemi bu zaman aşımı değerinden uzun sürüyorsa gerçekleşir. Gönderme işlemi iptal edilir.
  • ReceiveTimeout: Yanıt bu zaman aşımı değerinden daha uzun sürerse gerçekleşir. İstek iptal edilir.

ve ilk iki nedeni gözlemlediğinizde, ResolveTimeout ConnectTimeoutdaha önce özetlenen sorun giderme metodolojisi işe yaramaz. Bunun nedeni, hedef sunucuda herhangi bir trafik görmemeniz ve bu nedenle hata kodunu bilmemenizdir. Bu nedenle, bu durumda ResolveTimeout veya ConnectTimeout ek içgörüler için bir WinHTTP izlemesi yakalamak isteyebilirsiniz. Sorun giderme ve izleme ile ilgili diğer örnekler için WinHTTP veya WEBIO izleme bölümüne ve aşağıdaki bloglara bakın:

502.3 Bağlantı sonlandırma hataları

Akış ortasında ARR ile üye sunucu arasındaki bağlantı kesildiğinde de 502.3 hataları döndürülür. Bu tür bir sorunu test etmek için çağıran Response.Close()bir .aspx sayfası oluşturun. Aşağıdaki örnekte, "time" adlı bir dizin vardır ve bu dizinde varsayılan belge olarak bir .aspx sayfasıyla yapılandırılır. Dizine göz atmayı denediğinizde, ARR aşağıdaki hata iletisini gösterir:

Bağlantı sonlandırma hatalarını gösteren ekran görüntüsü.

Hata 0x80072efe ERROR_INTERNET_CONNECTION_ABORTED karşılık gelir. İstek, bu sorun gidericide daha önce kullanılan adımların aynısını kullanarak bunu gerçekten işleyen sunucuya izlenebilir ve tek bir özel durum söz konusu olabilir. Hedef sunucuda Başarısız İstek İzleme sunucuda işlenen isteği gösterirken, ilişkili günlük girdisi IIS günlüklerinde görünmez. Bunun yerine, bu istek HTTPERR günlüğüne aşağıdaki gibi kaydedilir:

HTTP/1.1 GET /time/ - 1 Connection_Dropped DefaultAppPool

Hedef sunucudaki yerleşik günlükler sorun hakkında ek bilgi sağlamaz, bu nedenle sonraki adım ARR sunucusundan bir ağ izlemesi toplamak olacaktır. Önceki örnekte, .aspx sayfası hiçbir veri döndürmeden çağrıldı Response.Close() . Bunu bir ağ izlemesinde görüntülemek, hedef sunucudan bir Connection: close HTTP üst bilgisinin geldiğini gösterir. Bu bilgilerle, üst bilginin neden gönderildiğine Connection: close ilişkin bir araştırma başlatabilirsiniz.

Aşağıdaki hata, üye sunucudan geçersiz bir yanıtın başka bir örneğidir:

Üye sunucudan geçersiz bir yanıt gösteren ekran görüntüsü.

Bu örnekte, ARR istemciden veri almaya başladı, ancak istek varlığı gövdesi okunurken bir sorun oluştu. Bunun sonucunda 0x80072f78 hata kodu döndürüldü. Daha fazla araştırmak için üye sunucuda Ağ İzleyicisi'ni kullanarak sorunun ağ izlemesini alın. Bu özel hata örneği, yanıtın bir bölümünü gönderdikten sonra ASP.net sayfasında çağrılarak ve sonra çağrılarak Response.Flush()oluşturulmuşturResponse.Close(). ARR sunucusu ile üye sunucular arasındaki trafik SSL üzerindenyse, Windows Server 2008'de WinHTTP izleme veya Windows Server 2008 R2'de WebIO izleme ek bilgi sağlayabilir. WebIO izleme, bu sorun gidericinin ilerleyen bölümlerinde açıklanmıştır.

502.4 İsteği yönlendirmek için uygun sunucu bulunamadı

İlişkili hata kodu 0x00000000 olan HTTP 502.4 hatası genellikle grubundaki tüm üyelerin çevrimdışı veya başka bir şekilde erişilemez olduğunu gösterir.

İsteği yönlendirmek için uygun sunucu bulunamadı iletisini gösteren ekran görüntüsü.

İlk adım, üye sunucuların çevrimiçi olduğunu doğrulamaktır. Bunu denetlemek için IIS Yöneticisi'nde grubu altındaki Sunucular düğümüne gidin.

IIS Yöneticisi'nde Sunucu grubu altındaki Sunucular düğümüne nasıl gidildiğini gösteren ekran görüntüsü.

Çevrimdışı sunucuları geri getirmek için sunucu adına sağ tıklayın ve Yük Dengelemeye Ekle'yi seçin. Sunucuları yeniden çevrimiçi duruma getiremiyorsanız, üye sunuculara ARR sunucusundan ulaşılıp ulaşılamadığını doğrulayın. Sorun hakkında bazı ipuçları bulmak için Sunucular sayfasındaki İletileri izleme bölmesini gözden geçirin. Web Farm Framework (WFF) 2.0 kullanıyorsanız, uygulama havuzu yeniden başlatıldığında bu hatayı alabilirsiniz. Kurtarmak için Web Grubu Hizmetini yeniden başlatmanız gerekir.

WinHTTP veya WebIO izleme

WireShark gibi paket yakalama araçları genellikle tam olarak zaman aşımına uğradıklarını belirlemek için ihtiyacınız olan bilgileri sağlar. Ancak, farklı bir yaklaşım denemeniz gereken zamanlar (örneğin, trafik SSL ile şifrelenmişse) vardır. Windows 7 ve Windows Server 2008 R2'den başlayarak, bir yönetim komut isteminden aşağıdaki komutu çalıştırarak netsh aracını kullanarak WinHTTP izlemeyi etkinleştirebilirsiniz:

netsh trace start scenario=internetclient capture=yes persistent=no level=verbose tracefile=c:\temp\net.etl

Ardından sorunu yeniden oluşturun. Sorun yeniden üretildikten sonra aşağıdaki komutu çalıştırarak izlemeyi durdurun:

netsh trace stop

Komutun stop tamamlanması birkaç saniye sürer. İşlem tamamlandığında, içinde bir net.etl dosyası ve bir net.cab dosyası bulursunuz C:\temp. Yukarıdaki komutları çalıştırmadan önce klasörün var olduğundan emin C:\temp olmanız gerekir. .cab dosyası, .etl dosyasının çözümlenmesinde yararlı olabilecek olay günlüklerini ve diğer verileri içerir.

Günlüğü analiz etmek için

  1. Netmon 3.4 veya sonraki bir sürümde açın.

  2. Ayrıştırıcı profilinizi ayarladığınızdan emin olun. Bunu başarmak için Araçlar>Seçenekleri menüsünü açın, Ayrıştırıcı Profilleri sekmesi >Windows profili'ni seçin ve sonra değişiklikleri uygulamak için Etkin Olarak Ayarla düğmesini seçin.

  3. UT işlem adı sütunuyla ilişkilendirerek ARR'nin çalıştığı w3wp.exe örneğini bulana kadar izlemede ilerleyin.

  4. w3wp'ye sağ tıklayın ve filtreyi görüntülemek için UT İşlem adı ekle'yi seçin. Bu, görüntü filtresini şuna benzer şekilde ayarlar:

    UTProcessName == "w3wp.exe (1432)"
    

Sonuçları aşağıdaki şekilde değiştirerek daha fazla filtreleyebilirsiniz:

UTProcessName == "w3wp.exe (<pid>)" AND ProtocolName == "WINHTTP_MicrosoftWindowsWinHttp"

Zaman aşımı hatasını bulana kadar çıkışta kaydırmanız gerekir. Aşağıdaki örnekte, bir isteğin çalışması 30 saniyeden fazla sürdüğünden (ARR'nin varsayılan zaman aşımı) zaman aşımına uğradı.

336  2:32:22 PM  7/22/2011  32.6380453  w3wp.exe (1432)  WINHTTP_MicrosoftWindowsWinHttp  WINHTTP_MicrosoftWindowsWinHttp:12:32:23.123 ::sys-recver starts in _INIT state 
337  2:32:22 PM  7/22/2011  32.6380489  w3wp.exe (1432)  WINHTTP_MicrosoftWindowsWinHttp  WINHTTP_MicrosoftWindowsWinHttp:12:32:23.123 ::current thread is not impersonating 
340  2:32:22 PM  7/22/2011  32.6380584  w3wp.exe (1432)  WINHTTP_MicrosoftWindowsWinHttp  WINHTTP_MicrosoftWindowsWinHttp:12:32:23.123 ::sys-recver processing WebReceiveHttpResponse completion (error-cdoe = ? (0x5b4), overlapped = 003728F0) 
341  2:32:22 PM  7/22/2011  32.6380606  w3wp.exe (1432)  WINHTTP_MicrosoftWindowsWinHttp  WINHTTP_MicrosoftWindowsWinHttp:12:32:23.123 ::sys-recver failed to receive headers; error = ? (1460)
342  2:32:22 PM  7/22/2011  32.6380800  w3wp.exe (1432)  WINHTTP_MicrosoftWindowsWinHttp  WINHTTP_MicrosoftWindowsWinHttp:12:32:23.123 ::ERROR_WINHTTP_FROM_WIN32 mapped (?) 1460 to (ERROR_WINHTTP_TIMEOUT) 12002 
343  2:32:22 PM  7/22/2011  32.6380829  w3wp.exe (1432)  WINHTTP_MicrosoftWindowsWinHttp  WINHTTP_MicrosoftWindowsWinHttp:12:32:23.123 ::sys-recver returning ERROR_WINHTTP_TIMEOUT (12002) from RecvResponse() 
344  2:32:22 PM  7/22/2011  32.6380862  w3wp.exe (1432)  WINHTTP_MicrosoftWindowsWinHttp  WINHTTP_MicrosoftWindowsWinHttp:12:32:23.123 ::sys-req completes recv-headers inline (sync); error = ERROR_WINHTTP_TIMEOUT (12002) 

Aşağıdaki örnekte, içerik sunucusu tamamen çevrimdışıydı:

42  2:26:39 PM  7/22/2011  18.9279133  WINHTTP_MicrosoftWindowsWinHttp  WINHTTP_MicrosoftWindowsWinHttp:12:26:39.704 ::WinHttpReceiveResponse(0x11d23d0, 0x0)  {WINHTTP_MicrosoftWindowsWinHttp:4, NetEvent:3} 
43  2:26:39 PM  7/22/2011  18.9279633  WINHTTP_MicrosoftWindowsWinHttp  WINHTTP_MicrosoftWindowsWinHttp:12:26:39.704 ::sys-recver starts in _INIT state  {WINHTTP_MicrosoftWindowsWinHttp:4, NetEvent:3} 
44  2:26:39 PM  7/22/2011  18.9280469  WINHTTP_MicrosoftWindowsWinHttp  WINHTTP_MicrosoftWindowsWinHttp:12:26:39.704 ::current thread is not impersonating  {WINHTTP_MicrosoftWindowsWinHttp:4, NetEvent:3} 
45  2:26:39 PM  7/22/2011  18.9280776  WINHTTP_MicrosoftWindowsWinHttp  WINHTTP_MicrosoftWindowsWinHttp:12:26:39.704 ::sys-recver processing WebReceiveHttpResponse completion (error-cdoe = WSAETIMEDOUT (0x274c), overlapped = 003728F0)  {WINHTTP_MicrosoftWindowsWinHttp:4, NetEvent:3} 
46  2:26:39 PM  7/22/2011  18.9280802  WINHTTP_MicrosoftWindowsWinHttp  WINHTTP_MicrosoftWindowsWinHttp:12:26:39.704 ::sys-recver failed to receive headers; error = WSAETIMEDOUT (10060) {WINHTTP_MicrosoftWindowsWinHttp:4, NetEvent:3} 
47  2:26:39 PM  7/22/2011  18.9280926  WINHTTP_MicrosoftWindowsWinHttp  WINHTTP_MicrosoftWindowsWinHttp:12:26:39.704 ::ERROR_WINHTTP_FROM_WIN32 mapped (WSAETIMEDOUT) 10060 to (ERROR_WINHTTP_TIMEOUT) 12002  {WINHTTP_MicrosoftWindowsWinHttp:4, NetEvent:3} 
48  2:26:39 PM  7/22/2011  18.9280955  WINHTTP_MicrosoftWindowsWinHttp  WINHTTP_MicrosoftWindowsWinHttp:12:26:39.704 ::sys-recver returning ERROR_WINHTTP_TIMEOUT (12002) from RecvResponse() {WINHTTP_MicrosoftWindowsWinHttp:4, NetEvent:3} 

Diğer kaynaklar

Üçüncü taraf bilgileri hakkında yasal uyarı

Bu makalede adı geçen üçüncü taraf ürünleri Microsoft'tan bağımsız şirketler tarafından üretilmektedir. Microsoft, bu ürünlerin performansı veya güvenilirliği ile ilgili örtük veya başka türlü hiçbir garanti vermez.