Çekişme, performans ve Web Hizmetleri için bir ASP.NET uygulamasından çağrıları yaptığınızda kilitlenmeler

Makale çevirileri Makale çevirileri
Makale numarası: 821268 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

Web Hizmetleri Microsoft ASP.NET uygulamasından çağrıları yaptığınızda, Çekişme, düşük performans ve kilitlenmeleri karşılaşabilirsiniz. İstemci isteklerine yanıt (veya "askıda") durdurmak veya çalıştırmak için çok uzun bir zaman bildirebilir. Kilitlenme olduğundan şüphe duyuluyorsa, alt işlemin geri dönüştürülmesi olabilir. Uygulama olay günlüğüne aşağıdaki iletileri alabilirsiniz.
  • Internet Information Services (IIS) 5.0 kullanıyorsanız, uygulama günlüğüne aşağıdaki ileti 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 günlüğüne aşağıdaki ileti 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 günlüğüne aşağıdaki ileti 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>'.

Ayrıca aşağıdaki özel durum hata iletisi alabilirsiniz olduğunda ileti HttpWebRequest.GetResponse yöntemine yapılan bir çağrı yaptığınız:
"System.InvalidOperationException: İş parçacığı havuzu nesnesinde tamamlamak için yeterli boş iş parçacığı yoktu işlem."
Ayrıca aşağıdaki özel durum hata iletisi alabilirsiniz Tarayıcı:
"HttpException (0x80004005): İstek zaman aşımına out."
Not Bu makale HttpWebRequest istekleri doğrudan uygulamalar için de geçerlidir.

Neden

ASP.NET sayısını sınırladığından, bu sorun ortaya çıkabilir çalışan iş parçacıkları ve yürütmek için bir çağrı kullanabilirsiniz tamamlama bağlantı noktası iş parçacıkları istek sayısı.

Genellikle, bir işçi iş parçacığı isteği gönderir kod yürütmesine ve Web hizmeti ile geri almak için tamamlama bağlantı noktası iş parçacığı bir Web servisine bir çağrı kullanır. Ancak, isteği yeniden yönlendirildiği veya kimlik doğrulaması gerektiriyorsa, çağrı kadar iki çalışan iş parçacıkları ve tamamlama bağlantı noktası iki iş parçacığı kullanabilirsiniz. Bu nedenle, aynı anda birden çok Web hizmeti çağrıları ortaya çıktığında yönetilen iş parçacığı havuzu tüketebilir.

Örneğin, 10 çalışan iş parçacıkları için iş parçacığı havuzu sınırlıdır ve tüm 10 çalışan iş parçacığı bir geri yürütmek bekleyen kod şu anda yürütülen varsayalım. İş parçacığı havuzu için sıraya herhangi bir iş öğesini, bir iş parçacığı kullanılabilir hale gelinceye kadar engellendiği için geri arama hiçbir zaman çalıştırabilirsiniz.

Başka bir olası kaynak çekişmesi, bağlantı sayısı sınırı için System.Net ad alanını kullanan maxconnection parametresidir. Genellikle, Bu sınır, beklendiği gibi çalışır. Ancak, birçok uygulama birçok yapmaya çalışırsanız, istekler aynı anda tek bir IP adresi için iş parçacıkları için beklemeniz gerekebilir kullanılabilir bağlantı.

Çözüm

Bu sorunları gidermek için durumunuza en iyi uyan Machine.config dosyasındaki aşağıdaki parametreleri ayarlayabilirsiniz:
  • maxWorkerThreads
  • minWorkerThreads
  • maxIoThreads
  • minFreeThreads
  • minLocalRequestFreeThreads
  • maxconnection
  • executionTimeout
Başarıyla bu sorunları gidermek için aşağıdaki eylemleri gerçekleştirin:
  • Anda çalışabilecek ASP istekleri sayısı sınırı aynı zamanda CPU başına yaklaşık 12.
  • Web hizmeti geri çağırmalar iş parçacığı havuzu iş parçacığı serbestçe kullanmasına izin verir.
  • Maxconnections parametresi için uygun bir değer seçin. Seçiminizi temel sayıda IP adresi ve Kullanılan uygulama etki alanları.
Not 12 ASP.NET istek sayısını sınırlamak için öneri CPU biraz rastgeledir. Ancak, bu sınırı için iyi çalışması için kanıtlandı Çoğu uygulamalar.

maxWorkerThreads ve maxIoThreads

ASP.NET aşağıdaki iki yapılandırma ayarlarını kullanır. en fazla çalışan iş parçacıkları ve olan tamamlanma iş parçacığı sayısını sınırlamak için kullanılan:
<processModel maxWorkerThreads="20" maxIoThreads="20">
Dolaylı olarak maxWorkerThreads parametresi ve maxIoThreads parametresi CPU sayısı ile çarpılır. İçin iki işlemci varsa, en fazla çalışan iş parçacığı sayısını örnektir Aşağıdaki:
2 * maxWorkerThreads

minFreeThreads ve minLocalRequestFreeThreads

ASP.NET aşağıdaki yapılandırma de içerir. iş parçacığı kaç çalışan iş parçacıkları ve tamamlama bağlantı noktası belirleyen ayarları Uzak isteği veya yerel isteği başlatmak kullanılabilir olması gerekir:
<httpRuntime minFreeThreads="8" minLocalRequestFreeThreads="8">
Değil yeterli iş parçacığı kullanılabilir varsa, isteği sıraya alındı yeterli iş parçacığı isteği yapmak ücretsiz kadar. Bu nedenle, ASP.NET olur Aşağıdaki istek sayısı birden fazla aynı anda çalıştırma:
(maxWorkerThreads*CPU sayısı)-minFreeThreads
NotMinFreeThreads parametresi ve minLocalRequestFreeThreads parametresi dolaylı olarak CPU sayısı çarpılır değil.

minWorkerThreads

Gibi ASP.NET 1.1 ve ASP.NET 1.0 Service Pack 3 ASP.NET ayrıca belirler aşağıdaki yapılandırma ayarı içerir nasıl birçok iş parçacıklarını hemen uzak hizmet vermek kullanılabilir yapılabilir. isteği.
<processModel minWorkerThreads="1">
İş parçacıkları Denetlenen bu ayarı, bir çok daha hızlı oranda oluşturulabilir çalışan iş parçacığı oluşturulan CLR'ın varsayılan "iş parçacığı ayarlama gelen" yetenekleri. Bu ayar, ASP.NET olabilir hizmet isteklerine etkinleştirir. ASP.NET istek sırası arka plan üzerinde bir slow-down nedeniyle aniden doldurma Sunucu, istemci veya buna benzer istekleri ani patlama sırada, ani rise istekleri sayısı neden olur. , minWorkerThreads parametresi için varsayılan değer 1'dir. MinWorkerThreads parametresinin değeri aşağıdaki değere ayarlamak öneririz.
minWorkerThreads = maxWorkerThreads / 2
Varsayılan olarak, minWorkerThreads parametresi Web.config dosyası yoksa veya Machine.config dosyası. Bu ayar örtülü olarak sayısı ile çarpımı CPU.

maxconnection

Kaç bağlantıları için yapılan maxconnection parametre belirler bir Belirli bir IP adresi. Parametre aşağıdaki gibi görünür:
<connectionManagement>
    <add address="*" maxconnection="2">
    <add address="http://65.53.32.230" maxconnection="12">
</connectionManagement>
Uygulama kodu tarafından IP adresi yerine ana bilgisayar uygulama başvuruyorsa, parametre aşağıdaki gibi görünmelidir:
<connectionManagement>
    <add address="*" maxconnection="2">
    <add address="http://hostname" maxconnection="12">
</connectionManagement>
Son olarak, uygulama, 80'den farklı bir bağlantı noktası üzerinde barındırılıyorsa, URI, aşağıdakine benzer standart olmayan bağlantı noktası eklemek parametre içerir:
<connectionManagement>
    <add address="*" maxconnection="2">
    <add address="http://hostname:8080" maxconnection="12">
</connectionManagement>
Bu makalede açıklanan parametreleri için tüm işlem düzeyinde ayarlardır. Ancak, uygulama etki alanı düzeyine maxconnection parametre ayarı uygulanır. Varsayılan olarak, Bu ayar için uygulama etki alanı düzeyinde geçerlidir çünkü en oluşturabilirsiniz. her uygulama etki alanında özel bir IP adresi için iki bağlantılarından birini, işlem.

executionTimeout

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

NotExecutionTimeout parametresinin değeri artırmak istiyorsanız, siz de processModel değiştirmeniz gerekebilir responseDeadlockInterval parametre ayarı.

Öneriler

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

Eğer bir Web hizmeti çağrısı için tek bir IP adresi her bir ASPX sayfası kuran, Microsoft, aşağıdaki yapılandırma ayarları kullanmanızı önerir:
  • 100MaxWorkerThreads parametre ve maxIoThreads parametre değerlerini ayarlayın.
  • Maxconnection parametre değerini ayarlayın 12 *N (burada N CPU sayısı, Bilgisayarınızda yüklü).
  • MinFreeThreads parametre değerlerini ayarlayın 88 *N ve minLocalRequestFreeThreads parametresi76 *N.
  • Ayarlama 50' ye minWorkerThreads değeri. Unutmayın, minWorkerThreads varsayılan yapılandırma dosyası değil. Bunu eklemeniz gerekir.
Bazı Bu önerileri içerir basit bir formül içerir. bir sunucudaki CPU. İçinde CPU sayısını temsil eden değişken formülleri olan N. Bu ayarlar, hiper iş parçacığı etkin varsa mantıksal CPU sayısı fiziksel CPU sayısı kullanmanız gerekir. Örneğin, dört işlemci sunucu ile hiper iş parçacığı etkin, sonra varsa değeri N Formüllerde 84yerine olacaktır.

Not Bu yapılandırmayı kullandığınızda, en fazla 12 yürütebilirsiniz. ASP.NET çünkü bu CPU aynı anda ister 100 88 12 =. Bu nedenle, en az 88 *N alt iş parçacıkları ve 88 *N tamamlama bağlantı noktası akışlardır diğer kullanılabilir (örneğin Web hizmeti geri aramalar için olduğu gibi) kullanır.

Örneğin, dört işlemci ve hyperthreading ile bir sunucuya sahip etkin. Bu formüllere göre aşağıdaki değerleri kullanır Bu makalede açıklanan yapılandırma ayarları.
<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>

Ayrıca, bu yapılandırmayı kullandığınızda, 12 bağlantılar kullanılabilir her IP adresi her uygulama etki alanı için CPU. Bu nedenle, aşağıdaki senaryo, istekleri için bekleyen çok az Çekişme oluşur bağlantıları ve iş parçacığı havuzu değil bitti:
  • Web tek bir uygulama (AppDomain) barındırır.
  • Her bir istek bir ASPX sayfası için bir Web hizmeti isteği yapar.
  • Aynı IP adresi için tüm isteklerdir.
Bu yapılandırmayı kullandığınızda, ancak, senaryolar, içerir aşağıdakilerden birini büyük olasılıkla çok fazla bağlantı kullanır:
  • Birden çok IP adresi olarak isteklerdir.
  • Yeniden yönlendirilen (302 durum kodu) isteklerdir.
  • İstekleri kimlik doğrulaması gerektirir.
  • Birden çok uygulama etki alanları isteklerinin yapılma.
Bu senaryolarda, bunun için daha düşük bir değer kullanmak için iyi bir fikirdir maxconnection parametre ve minFreeThreads parametresi ve minLocalRequestFreeThreads parametresi için daha yüksek değerler.

Durum

Bu davranış tasarım gereğidir.

Daha fazla bilgi

Düşük performans ve ASP.NET ile birlikte IIS 7.0 üzerinde Çekişme yaşıyorsanız, aşağıdaki Microsoft Web günlükleri için gidin:
IIS 7.5, IIS 7.0 ve IIS 6.0 ASP iş parçacığı kullanımı

IIS 7.0 içindeki ASP.net askıda kalabilir

Referanslar

Daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesine gidin:
ASP.NET performans geliştirme

Özellikler

Makale numarası: 821268 - Last Review: 6 Şubat 2013 Çarşamba - Gözden geçirme: 1.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft .NET Framework 2.0
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
Anahtar Kelimeler: 
kbprb kbmt KB821268 KbMttr
Machine-translated Article
Ö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

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com