Makale numarası: 821268 - Son Gözden Geçirme: 28 Temmuz 2009 Salı - Gözden geçirme: 11.0

ASP.NET uygulamaları Web hizmet istekleri yaptığınızda kilitlenmeleri Çekişme ve düşük performans

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Belirtiler

Bir ASP.NET XML Web Hizmetleri için görüşmeleri yaptığınız uygulama, Çekişme ve düşük performans kilitlenmeleri karşılaşabilirsiniz. Istemci isteklerine yanıt (veya "askıda") veya yürütmek için çok uzun zaman alıyor bildirebilir. Kilitlenme şüphelenildi, alt işlemin geri dönüştürülmeden olabilir. Uygulama olay günlüğünde, aşağıdaki iletileri alabilirsiniz.
  • Microsoft ınternet ınformation Services (IIS) 5.0 kullanıyorsanız, uygulama olay günlüğüne aşağıdaki iletilerini alırsınız:

       Event Type:     Error
       Event Source:   ASP.NET 1.0.3705.0
       Event Category: None
       Event ID:       1003
       Date:           5/4/2003
       Time:           6:18:23 PM
       User:           N/A
       Computer:       <ComputerName>
       Description:
          aspnet_wp.exe  (PID: <xxx>) was recycled because it was suspected to be in a deadlocked state.
          It did not send any responses for pending requests in the last 180 seconds.

  • IIS 6. 0'ı kullanıyorsanız, uygulama olay günlüğüne aşağıdaki iletilerini alırsınız:

       Event Type:     Warning
       Event Source:   W3SVC-WP
       Event Category: None
       Event ID:       2262
       Date:           5/4/2003
       Time:           1:02:33 PM
       User:           N/A
       Computer:       <ComputerName>
       Description:
          ISAPI 'C:\Windows\Microsoft.net\Framework\v.1.1.4322\aspnet_isapi.dll' reported itself as
          unhealthy for the following reason: 'Deadlock detected'.

  • IIS 6. 0'ı kullanıyorsanız, sistem olay günlüğüne aşağıdaki iletilerini alırsınız:

       Event Type:     Warning
       Event Source:   W3SVC
       Event Category: None
       Event ID:       1013
       Date:           5/4/2003
       Time:           1:03:47 PM
       User:           N/A
       Computer:       <ComputerName>
       Description:
          A process serving application pool 'DefaultAppPool' exceeded time limits during shut down.
          The process id was '<xxxx>'.

HttpWebRequest.GetResponse yöntemine yapılan bir çağrı yaptığınızda, ayrıca aşağıdaki özel durum hata iletisi alabilirsiniz:
“ Iletisi: mevcut değildi yeterli boş iş parçacığı işlemi tamamlamak için havuzu nesnesinde. ”
Ayrıca, tarayıcıda aşağıdaki özel durum hata iletisi alabilirsiniz:
“ HttpException (0x80004005): istek zaman aşımına uğradı. ”
Not Bu makale, doğrudan HttpWebRequest istekleri yapan uygulamalar için de geçerlidir.

Neden

ASP.NET çalışan iş parçacıkları ve bir çağrı istekleri yürütmek için kullanabileceğiniz tamamlanma bağlantı noktası iş parçacığı sayısını sınırlar, çünkü bu sorun oluşabilir.

Genellikle, bir Web hizmeti çağrısı isteği gönderen kod yürütmek için bir çalışan iş parçacığı bir tamamlama bağlantı noktasına iş Web hizmetinden geri almak için kullanır. Ancak, isteği yeniden yönlendirilip veya kimlik doğrulaması gerektiriyor, arama olarak iki alt ve iki tamamlama bağlantı iş parçacığını kullanabilir. Bu nedenle, aynı anda birden çok Web hizmeti çağrıları ortaya çıktığında yönetilen havuzu tüketebileceği.

Örneğin, 10 işçi iş parçacığı için havuzu sınırlıdır ve tüm 10 çalışan iş parçacıkları, kod yürütmek bir geri arama için bekleniyor yürütülmekte olduğunu varsayalım. Bir iş parçacığı kullanılabilir hale gelinceye kadar için havuzu için sıraya alınan çalışma öğeleri engellenir, çünkü geri hiçbir zaman çalıştırabilirsiniz.

Başka bir olası kaynağı çekişmesi System.Net ad bağlantı sayısı sınırı için kullandığı bir maxconnection parametresidir. Genellikle bu sınır, beklendiği gibi çalışır. Birçok uygulama, çok sayıda istek aynı anda tek bir IP adresi sağlamak çalışırsanız, ancak iş parçacığı kullanılabilir bir bağlantı için beklemeniz gerekebilir.

Çözüm

Bu sorunları gidermek için <a0></a0>, en iyi durumunuza uyması için Machine.config dosyasında aşağıdaki parametreleri ayarlamak:
  • maxWorkerThreads
  • minWorkerThreads
  • Maxıothreads
  • minFreeThreads
  • minLocalRequestFreeThreads
  • maxconnection
  • executionTimeout
Başarılı bir şekilde bu sorunları gidermek için <a0></a0>, aşağıdakileri yapın:
  • Yaklaşık 12 CPU başına aynı anda çalışabilecek ASP.NET istekleri sayısını sınırlayın.
  • Iş parçacığı havuzu serbest kullanılacak Web hizmet geri aramaları izin verir.
  • Maxconnections</a0> parametresi için uygun bir değer seçin. Seçiminizi, IP adreslerini ve kullanılan uygulama etki alanları sayısını dayandırın.
Not ASP.NET her CPU 12 istekleri sayısını sınırlamak için öneriyi biraz rasgele ' dir. Ancak, bu sınır, çoğu uygulama için iyi bir çözüm için proved.

maxWorkerThreads ve Maxıothreads

ASP.NET çalışan iş parçacığı ve kullanılan tamamlanma iş parçacığı sayısının sayısını sınırlamak için aşağıdaki iki yapılandırma ayarlarını kullanır:
<processModel maxWorkerThreads="20" maxIoThreads="20">
MaxWorkerThreads parametresi ve Maxıothreads parametresi örtülü olarak CPU sayısı ile çarpımı. Iki işlemci varsa, örneğin, çalışan iş parçacığı sayısı şudur:
2 * maxWorkerThreads

minFreeThreads ve minLocalRequestFreeThreads

ASP.NET, işçi iş parçacığı ve tamamlama bağlantı iş parçacığı sayısını Uzak isteği'ni veya yerel isteği'ni başlatmak kullanılabilir olmalıdır belirleyen aşağıdaki yapılandırma ayarlarını da içerir:
<httpRuntime minFreeThreads="8" minLocalRequestFreeThreads="8">
Yok, yeterli iş parçacığı kullanılabilir yeterli iş parçacığı isteği yapmak boş olana kadar isteği sıraya. Bu nedenle ASP.NET, aynı anda en çok istek sayısını aşağıdaki çalıştırmaz:
(maxWorkerThreads * number of CPUs)-minFreeThreads
NotMinFreeThreads parametresi ve minLocalRequestFreeThreads parametresi örtülü olarak CPU sayısı ile çarpımı değil.

minWorkerThreads

ASP.NET, ASP.NET 1.1 ve ASP.NET 1.0 Service Pack 3 olarak da kaç alt iş parçacığı hemen Uzak isteği hizmet kullanılabilir yapılabilir belirleyen aşağıdaki yapılandırma ayarı içerir.
<processModel minWorkerThreads="1">
Bu ayarıyla denetlenir iş parçacığı bir hızda çok daha hızlı "iş parçacığı ayarlama" CLR'ın varsayılan özellikleri oluşturulan bir çalışan iş parçacığı daha oluşturulabilir. Bu ayar, ASP.NET ASP.NET isteği sıraya ani bir veri bloğu sıradaki isteklerin sayısı, ani bir rise neden istekleri istemci bitiş veya benzer bir arka uç sunucudaki bir slow-down nedeniyle aniden doldurma hizmet isteklerini etkinleştirir. MinWorkerThreads parametresi için varsayılan değer 1'dir. MinWorkerThreads parametresi için değer aşağıdaki değere ayarlamanız önerilir.
minWorkerThreads = maxWorkerThreads / 2
Varsayılan olarak, Web.config dosyası veya Machine.config dosyasında minWorkerThreads parametresi yok. Bu ayar örtülü olarak CPU sayısı ile çarpılır.

maxconnection

Kaç bağlantı belirli bir IP adresine yapılan maxconnection parametre belirler. Parametre aşağıdaki gibi görünür:
<connectionManagement>
    <add address="*" maxconnection="2">
    <add address="65.53.32.230" maxconnection="12">
</connectionManagement>
, Bu makalenin önceki bölümlerinde açıklanan parametreleri için tüm işlem düzeyinde ayarlarıdır. Ancak maxconnection parametre ayarı AppDomain düzeyi için geçerlidir. AppDomain düzeyi için bu ayarın uygulandığı için varsayılan olarak, en çok iki bağlantıya belirli bir IP adresine her AppDomain işleminizin oluşturabilirsiniz.

executionTimeout

ASP.NET istek yürütme süresi sınırlamak için aşağıdaki yapılandırma ayarını kullanır:
<httpRuntime executionTimeout="90"/>
Bu sınırın Server.ScriptTimeout özelliği'ni kullanarak da ayarlayabilirsiniz.

NotExecutionTimeout parametrenin değerini artırırsanız, processModel responseDeadlockInterval parametre ayarını değiştirmeniz gerekebilir.

Öneriler

Bu bölümde önerilen ayarları, tüm uygulamalar için çalışmayabilir. Ancak, aşağıdaki ek bilgileri ilgili düzenlemeler için yardımcı olabilir.

Bir Web hizmeti çağrısı tek bir IP adresi için her <a0>ASPX</a0> sayfasından yapıyorsanız, Microsoft, aşağıdaki yapılandırma ayarlarını kullanmanızı önerir:
  • MaxWorkerThreads</a0> parametresini ve Maxıothreads parametre değerlerini 100 ' e ayarlayın.
  • Için <a1>maxconnection</a1> parametresinin değeri 12 * N (burada N, CPU sayısıdır).
  • MinFreeThreads parametresi değerlerini ayarlamak 88 * N ve minLocalRequestFreeThreads parametresi 76 * N.
  • MinWorkerThreads değerini 50 ' ye ayarlayın. Unutmayın, minWorkerThreads varsayılan yapılandırma dosyası değil. Onu eklemeniz gerekir.
Bu öneriler bazıları bir sunucu üzerindeki CPU sayısı içeren basit bir formül içerir. Formüllerdeki CPU sayısını gösteren bir değişken N ' dir. Bu ayarlar, etkin, hiper iş parçacığı varsa, fiziksel CPU'yu sayısını yerine mantıksal CPU'yu numarasını kullanmalısınız. Örneğin, hiper iş parçacığı etkin dört işlemci bir sunucu varsa, 4, 8 formüllerdeki N değeri olacaktır.

Not Bu yapılandırmayı kullandığınızda, istediğiniz en fazla 12 ASP.NET istekleri CPU başına aynı anda çünkü çalıştırabilirsiniz 100 88 12 =. Bu nedenle, en az 88 * N işçi iş parçacığı ve 88 * N tamamlama bağlantı noktasına iş parçacıkları diğer kullanır (örneğin Web hizmet geri aramalar için) için kullanılabilir.

Örneğin, dört işlemciler ve hiper iş parçacığı etkin olan bir sunucu vardır. Üzerinde bu formülleri bağlı olarak, bu makalede açıklanan yapılandırma ayarları için aşağıdaki değerleri kullanırsınız.
<system.web>
	<processModel maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50"/>
	<httpRuntime minFreeThreads="704" minLocalRequestFreeThreads="608"/>
</system.web>

<system.net>
	<connectionManagement>
		<add address="[ProvideIPHere]" maxconnection="96"/>
	</connectionManagement>
</system.net>

Bu yapılandırmayı kullandığınızda, aynı zamanda, 12 bağlantıları CPU her IP adresi her AppDomain için kullanılabilir. Bu nedenle, bağlantılar için bekleyen istekleri ve havuzu adres kalmadı çok az çekişme aşağıdaki senaryoda oluşur:
  • Web'de tek bir uygulama (AppDomain) barındırır.
  • ASPX sayfası için her istek, bir Web hizmeti isteğinin yapar.
  • Tüm istekleri, aynı IP adresine ve.
Ancak, bu yapılandırmayı kullandığınızda, aşağıdaki iki işlemden birini gerektiren senaryoları büyük olasılıkla çok sayıda bağlantı kullanın:
  • Istekleri için birden çok IP adresi ve.
  • Istekleri yeniden yönlendirilen (302 durum kodu) ve.
  • Istekleri kimlik doğrulaması gerektirir.
  • Birden çok uygulama etki alanları, istekleri yapılır.
Bu senaryolarda, maxconnection parametre ve minFreeThreads parametresi ve minLocalRequestFreeThreads parametresi için daha yüksek değerler daha düşük bir değer kullanmak için iyi bir fikirdir.

Durum

Bu davranış tasarım yüzündendir.

Daha fazla bilgi

Düşük performans ve Çekişme üzerinde IIS 7. 0'da ASP.NET ile karşılaşıyorsanız, aşağıdaki Microsoft Web günlükleri Bkz:

IIS 7.0 ve 6.0, ASP.NET iş parçacığı kullanımı
http://blogs.msdn.com/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-0.aspx (http://blogs.msdn.com/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-0.aspx)
IIS 7.0 içindeki ASP.NET askıda kalıyor
http://blogs.msdn.com/webtopics/archive/2009/02/13/asp-net-hang-in-iis-7-0.aspx (http://blogs.msdn.com/webtopics/archive/2009/02/13/asp-net-hang-in-iis-7-0.aspx)

Referanslar

Daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/ms998549.aspx (http://msdn2.microsoft.com/en-us/library/ms998549.aspx)

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft .NET Framework 2.0
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
Anahtar Kelimeler: 
kbmt kbprb KB821268 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:821268  (http://support.microsoft.com/kb/821268/en-us/ )