Konflikty, nízký výkon a zablokování při žádosti o webové služby z prostředí ASP.NET aplikací

Překlady článku Překlady článku
ID článku: 821268 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Pokud provedete volání webové služby XML ASP.NET aplikace, můžete zaznamenat konflikty, nízký výkon a zablokování. Klienti mohou hlásit, že požadavky přestat reagovat (nebo "reagovat"), nebo opatření velmi delší dobu. Je-li podezření na zablokování, může být pracovní proces Recyklovat. Můžete obdržet následující zprávy v protokolu událostí aplikace.
  • Používáte-li Internetová informační služba (IIS) 5.0, obdržíte následující zprávy událostí aplikací protokol:

       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.

  • Používáte-li službu IIS 6.0, obdržíte následující zprávy v protokolu událostí aplikace:

       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'.

  • Používáte-li službu IIS 6.0, obdržíte následující zprávy v protokolu událostí systému:

       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>'.

Může se také zobrazit následující chybová zpráva výjimka při provést volání HttpWebRequest.GetResponse Metoda:
"Výjimka System.InvalidOperationException: V objektu zachovalo dokončení nebylo dostatek volných vláken operace."
Také můžete obdržet následující chybovou zprávu výjimky v prohlížeči:
"HttpException (0x80004005): Vypršel časový limit požadavku Wave.
Poznámka: Tento článek platí také pro aplikace, které HttpWebRequest požadavky přímo.

Příčina

K tomuto problému může dojít, protože prostředí ASP.Omezí NET pracovních podprocesů a ukončení podprocesů port volání lze použít ke spuštění požadavky.

Obvykle volání webové služby využívá jeden podproces k Spusťte kód, který odesílá požadavek a podproces dokončení jednoho portu přijímat zpětného volání webové služby. Nicméně pokud je požadavek přesměrování nebo vyžaduje ověřování volání pomocí až dvou pracovních a oba podprocesy port dokončení. Proto může vyčerpat spravované Zachovalo dojde současně více volání služby WWW.

Pro například Předpokládejme, že zachovalo je omezena na 10 pracovních podprocesů a všechny 10 pracovních podprocesů jsou aktuálně spouštění kódu, který čeká na zpětné volání spustit. Zpětné volání lze spustit nikdy, protože práci položky, které jsou ve frontě zachovalo jsou blokovány, dokud se podproces k dispozici.

Je dalším zdrojem potenciální konflikty maxconnection parametr, System.NET obor názvů se používá k omezení počtu připojení. Obecně Tento limit funguje podle očekávání. Avšak v případě, že mnoho aplikací se pokuste provést mnoho požadavky na jedinou adresu IP ve stejnou dobu, může mít podprocesy čekání připojení k dispozici.

Řešení

Chcete-li tyto problémy vyřešit, můžete naladit následující Parametry v souboru Machine.config co nejlépe přizpůsobit vaší situaci:
  • maxWorkerThreads
  • minWorkerThreads
  • maxIoThreads
  • minFreeThreads
  • minLocalRequestFreeThreads
  • maxconnection
  • executionTimeout
Chcete-li tyto problémy vyřešit, postupujte takto:
  • Omezte počet ASP.NETTO požadavků, které lze spustit na stejnou dobu přibližně 12 na jeden procesor.
  • Povolit zpětná volání služby Web volně používat podprocesy Zachovalo.
  • Vyberte hodnotu odpovídající MaxConnections parametr. Založit svůj výběr počet adres IP a Součástí AppDomain, která jsou používána.
Poznámka: Doporučení k omezení počtu ASP.NETTO požadavků 12 na jeden procesor je poněkud svévolné. Však tento limit se ukázalo jako fungují dobře Většina aplikací.

maxWorkerThreads a maxIoThreads

PROSTŘEDÍ ASP.NET používá následující dvě konfigurace nastavení omezit maximální počet pracovních podprocesů a ukončení podprocesů, které jsou použít:
<processModel maxWorkerThreads="20" maxIoThreads="20">
Na maxWorkerThreads parametr a maxIoThreads Parametr jsou implicitně násobené počtem procesorů. Pro maximální počet pracovních podprocesů je například, pokud máte dva procesory následující:
2 * maxWorkerThreads

minFreeThreads a minLocalRequestFreeThreads

PROSTŘEDÍ ASP.NET obsahuje také následující konfiguraci: nastavení, které určují, kolik pracovních podprocesů a dokončení portu podprocesů musí být k dispozici pro spuštění vzdáleného požadavku nebo požadavek na místní:
<httpRuntime minFreeThreads="8" minLocalRequestFreeThreads="8">
Pokud nejsou dostatečné podprocesů k dispozici, je ve frontě požadavek dokud dostatečné podprocesy mohou volně požadavek. Proto ASP.NET nebudou spustit více než následující počet požadavků současně:
(maxWorkerThreads*počet procesorů)-minFreeThreads
Poznámka: Na minFreeThreads parametr a minLocalRequestFreeThreads Parametr není implicitně vynásobí počet procesorů.

minWorkerThreads

Jako prostředí ASP.NET 1.0 Service Pack 3 a ASP.NET 1.1, PROSTŘEDÍ ASP.NET obsahuje také následující konfigurační nastavení, která určuje, jak počet pracovních podprocesů může být k dispozici ihned služby vzdálené požadavek.
<processModel minWorkerThreads="1">
Podprocesy která jsou řízena toto nastavení může být vytvořen rychlostí mnohem rychlejší než pracovních podprocesů, které jsou vytvořeny z modul CLR výchozí "podproces ladění" možnosti. Toto nastavení umožňuje prostředí ASP.NET na žádosti o služby, které mohou být vyplnění náhle ASP.NETTO požadavku fronty kvůli zpomalování, který na zadní Server náhlé shluku požadavky od konce klienta nebo podobným který způsobí náhlý nárůst počtu požadavků ve frontě. Na Výchozí hodnota minWorkerThreads parametr je 1. Doporučujeme nastavit hodnotu minWorkerThreads Parametr následující hodnoty.
minWorkerThreads = maxWorkerThreads / 2
Standardně minWorkerThreads Parametr není k dispozici v souboru Web.config nebo v souboru Machine.config. Toto nastavení implicitně vynásobením počtu Procesory.

maxconnection

Na maxconnection parametr určuje, kolik připojení lze k Určená adresa IP. Parametr se zobrazí takto:
<connectionManagement>
    <add address="*" maxconnection="2">
    <add address="65.53.32.230" maxconnection="12">
</connectionManagement>
Nastavení parametrů, které jsou zmíněny výše v článek se vše na úrovni procesu. Však maxconnection nastavení parametru se vztahuje na úrovni domény AppDomain. Ve výchozím nastavení, protože toto nastavení se vztahuje na úrovni domény, můžete vytvořit maximálně dvě připojení na konkrétní adresu IP z každé domény ve vaší proces.

executionTimeout

PROSTŘEDÍ ASP.NET používá následující nastavení konfigurace Doba provádění požadavku omezení:
<httpRuntime executionTimeout="90"/>
Toto omezení můžete nastavit také pomocí Server.ScriptTimeout Vlastnost.

Poznámka: Pokud zvýšíte hodnotu executionTimeout parametr, bude pravděpodobně nutné změnit processModel responseDeadlockInterval nastavení parametru.

Doporučení

Nastavení, které jsou doporučené v tomto oddíle nemusí fungovat pro všechny aplikace. Však tyto dodatečné informace mohou pomoci proveďte příslušné úpravy.

Pokud Provádíte-li jedno volání webové služby na jedinou adresu IP z každé stránky ASPX Společnost Microsoft doporučuje použít následující nastavení:
  • Nastavení hodnoty maxWorkerThreads parametr a maxIoThreads Parametr 100.
  • Nastavte hodnotu maxconnection Parametr 12 *N (kde N je počet procesorů, máte).
  • Nastavení hodnoty minFreeThreads Parametr 88 *N a minLocalRequestFreeThreads Parametr76 *N.
  • Nastavit hodnota minWorkerThreads k 50. Mějte na paměti, minWorkerThreads není ve výchozím nastavení konfiguračního souboru. Je třeba ji přidat.
Některé Tato doporučení se týkají jednoduchý vzorec, který zahrnuje číslo procesorů na serveru. Proměnná, která představuje počet procesorů v je vzorce N. Pro tato nastavení, máte-li hyperthreading povolena, počet logických procesorů musí použít namísto počet fyzických procesorů. Například pokud máte čtyři procesoru serveru s hyperthreading povolena, pak hodnota N vzorce budou 8 místo 4.

Poznámka: Při použití této konfigurace, můžete provést maximálně 12 PROSTŘEDÍ ASP.ČISTÉ požadavky za CPU současně protože 100-88 = 12. Proto minimálně 88 *N pracovník podprocesy a 88 *N dokončení portu podprocesy k dispozici pro ostatní používá (například zpětná volání webové služby).

Například používáte server se čtyřmi procesory a hyperthreading povoleno. Na základě těchto vzorců, použijete následující hodnoty nastavení konfigurace, které jsou zmíněny v tomto článku.
<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>

Při použití této konfigurace, 12 připojení jsou také k dispozici na jeden procesor na adresu IP pro jednotlivé domény AppDomain. Proto v následujících scénář, dochází jen velmi málo konflikty při čekání požadavků připojení a zachovalo nebyla vyčerpána:
  • Pouze jedna aplikace (AppDomain) je hostitelem webu.
  • Každá žádost o ASPX stránka využívá jeden webové služby požadavek.
  • Všechny požadavky se stejnou adresu IP.
Avšak při použití této konfigurace, scénářů zahrnují pravděpodobně jeden z následujících použije příliš mnoho připojení:
  • Požadavky jsou na více adres IP.
  • Žádosti se přesměrování (302 stavový kód).
  • Požadavky vyžadují ověřování.
  • Požadavky jsou vyrobeny z několika součástí AppDomain.
V těchto situacích je vhodné použít nižší hodnotu na maxconnection parametr a vyšší hodnoty minFreeThreads parametr a minLocalRequestFreeThreads parametr.

Prohlášení

To chování je záměrné.

Další informace

Máte-li nízký výkon a konflikty ve službě IIS 7.0 pomocí prostředí ASP.NET, viz následující blogy společnosti Microsoft:

PROSTŘEDÍ ASP.Využití NET podprocesu v IIS 7.0 a 6.0
http://blogs.msdn.com/tmarq/archive/2007/07/21/ASP-NET-Thread-Usage-on-IIS-7-0-and-6-0.aspx
Zablokuje ASP.NET ve službě IIS 7.0
http://blogs.msdn.com/webtopics/archive/2009/02/13/ASP-NET-hang-in-IIS-7-0.aspx

Odkazy

Další informace naleznete na následující společnosti Microsoft Webu Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms998549.aspx

Vlastnosti

ID článku: 821268 - Poslední aktualizace: 20. května 2011 - Revize: 13.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft .NET Framework 2.0
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
Klíčová slova: 
kbprb kbmt KB821268 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:821268

Dejte nám zpětnou vazbu

 

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