Tvrdenie, zlý výkon a uviaznutiu Keď telefonujete do webových služieb ASP.NET aplikácie

Preklady článku Preklady článku
ID článku: 821268 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

Príznaky

Keď telefonujete k webovým službám z aplikácie Microsoft ASP.NET, môžu sa vyskytnúť sváru, zlý výkon a uviaznutiu. Klienti môžu nahlásiť že žiadosti prestať reagovať (alebo "visieť") alebo trvať veľmi dlhú dobu na vykonanie. Ak je podozrenie na mŕtvom bode pracovného procesu môžu byť recyklované. Môže dostávať tieto správy v denníku udalostí aplikácie.
  • Ak používate Internet Information Services (IIS) 5.0, dostanete nasledujúce správy v denníku aplikácie:

       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.

  • Ak používate IIS 6.0, dostanete nasledujúce správy v denníku aplikácie:

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

  • Ak používate služby IIS 6.0, môžete nasledujúce hlásenia do systémového denníka:

       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 tiež chybové nasledovné výnimky správy, kedy urobíte volanie metódy HttpWebRequest.GetResponse :
"System.InvalidOperationException: Tam nebolo dosť voľné vlákna v objekte ThreadPool pre dokončenie operácia."
Môžu tiež dostávať chybové hlásenie výnimky v prehliadači:
"HttpException (0x80004005): žiadosť načasované von."
Poznámka Tento článok platí aj pre aplikácie, ktoré HttpWebRequest požiadavky priamo.

Príčina

Tento problém sa môže vyskytnúť pretože ASP.NET obmedzuje počet pracovné podprocesy a dokončenie port vlákien hovoru môžete použiť na spustenie žiadosti.

Typicky, volanie webovej služby používa jeden pracovník vlákno spustiť kód, ktorý odošle požiadavku a jedno vlákno dokončenie port získať spätné volanie z webovej služby. Však ak žiadosť presmerovaný alebo vyžaduje autentifikáciu, volanie použiť toľko ako dve pracovné podprocesy a dve vlákna dokončenie port. Preto môže výfukové spravované ThreadPool vyskytnú viac webovú službu volania v rovnakom čase.

Predpokladajme napríklad, že ThreadPool je obmedzený na 10 pracovné podprocesy a že všetky 10 pracovné podprocesy sú momentálne spúšťajúcich kód, ktorý čaká na spätné volanie vykonať. Spätného volania môžete nikdy realizovať, pretože žiadne pracovné položky, ktoré sú zaradené do frontu na ThreadPool sú blokované, kým vlákno bude k dispozícii.

Ďalším potenciálnym zdrojom sváru je parameter maxconnection používajúci System.Net namespace obmedziť počet pripojení. Vo všeobecnosti, Tento limit funguje podľa očakávania. Avšak, ak snažiť mnoho mnoho aplikácií požiadavky na jednej IP adresy v rovnakej dobe, vlákna možno musieť počkať na pripojenie k dispozícii.

Riešenie

Ak chcete vyriešiť tieto problémy, môžete naladiť nasledujúce parametre v súbore Machine.config najlepšie zodpovedá vašej situácii:
  • maxWorkerThreads
  • minWorkerThreads
  • maxIoThreads
  • minFreeThreads
  • minLocalRequestFreeThreads
  • MaxConnection
  • executionTimeout
Úspešne vyriešiť tieto problémy, prijať tieto opatrenia:
  • Obmedziť počet žiadostí o ASP.NET, ktoré môžete spustiť v súčasne na približne 12 na CPU.
  • Povoliť webovú službu volania voľne používať vlákna v ThreadPool.
  • Vyberte vhodnú hodnotu pre maxconnections parameter. Počet IP adries vychádzať a Domény AppDomain, ktoré sú používané.
Poznámka Odporúčanie obmedziť počet žiadostí ASP.NET 12 každý Procesor je trochu svojvoľné. Tento limit sa však ukázal fungujú dobre pre Väčšina aplikácií.

maxWorkerThreads a maxIoThreads

ASP.NET používa nasledujúce dve konfiguračné nastavenia obmedziť maximálny počet pracovné podprocesy a ukončenie vlákna, ktoré sú použité:
<processModel maxWorkerThreads="20" maxIoThreads="20">
MaxWorkerThreads parameter a maxIoThreads parameter sa implicitne vynásobená počtom procesorov. Pre napríklad, ak máte dva procesory, maximálny počet pracovné podprocesy je takto:
2 * maxWorkerThreads

minFreeThreads a minLocalRequestFreeThreads

ASP.NET tiež obsahuje nasledujúce konfigurácie nastavenie, ktoré určuje koľko pracovné podprocesy a dokončenie port vlákna musí byť k dispozícii na spustenie vzdialených žiadosť alebo žiadosť o miestnych:
<httpRuntime minFreeThreads="8" minLocalRequestFreeThreads="8">
Ak tam nie sú dostatočné vlákna, žiadosti vo fronte kým dostatočné vlákna majú možnosť podať žiadosť. Preto bude ASP.NET súčasne spustiť viac ako nasledujúci počet žiadostí:
(maxWorkerThreads*Počet procesorov)-minFreeThreads
PoznámkaMinFreeThreads parameter a minLocalRequestFreeThreads parameter nie sú implicitne násobí počtom procesorov.

minWorkerThreads

Ako ASP.NET 1.0 Service Pack 3 a ASP.NET 1.1, ASP.NET tiež obsahuje nasledujúce konfiguračné nastavenie, ktoré určuje ako mnohé pracovné podprocesy môžu byť k dispozícii okamžite na servis diaľkového žiadosť.
<processModel minWorkerThreads="1">
Vlákna ktoré sú kontrolované podľa tohto nastavenia môže byť vytvorená v oveľa rýchlejším tempom než pracovné podprocesy, ktoré sú vytvorené z CLR predvolené "závit-tuning" schopnosti. Toto nastavenie umožňuje ASP.NET požiadavky na službu, ktorá môže byť Zrazu náplň ASP.NET front požiadaviek vzhľadom na spomalenie na back-end server, náhle rozpadnutia žiadosti z konca klienta, alebo niečo podobné to by spôsobiť náhly nárast počtu žiadostí vo fronte. Na Predvolená hodnota pre minWorkerThreads parameter je 1. Odporúčame nastaviť hodnotu pre minWorkerThreads parameter na nasledujúcu hodnotu.
minWorkerThreads = maxWorkerThreads / 2
Predvolene nie je prítomný v súbore Web.config minWorkerThreads parameter alebo Machine.config súboru. Toto nastavenie je implicitne vynásobenej počtom CPU.

MaxConnection

Maxconnection parameter určuje koľko pripojenia môžu byť vykonané špecifická adresa IP. Parameter vyzerá nasledovne:
<connectionManagement>
    <add address="*" maxconnection="2">
    <add address="http://65.53.32.230" maxconnection="12">
</connectionManagement>
Ak kód aplikácie odkazuje na aplikáciu do hostname namiesto IP adresy, parameter by mala vyzerať napríklad takto:
<connectionManagement>
    <add address="*" maxconnection="2">
    <add address="http://hostname" maxconnection="12">
</connectionManagement>
Nakoniec, ak aplikácia je hostiteľom iný port, než 80, parameter musí obsahovať neštandardný port v URI, podobná nasledovnej:
<connectionManagement>
    <add address="*" maxconnection="2">
    <add address="http://hostname:8080" maxconnection="12">
</connectionManagement>
Nastavenia pre parametre, ktoré sú popísané v tomto článku sú všetky na úrovni procesu. Nastavenie parametra maxconnection sa však vzťahuje na úrovni aplikačnej domény. V predvolenom nastavení pretože toto nastavenie platí na úrovni aplikačnej domény, môžete vytvoriť maximálne dve pripojenia na konkrétnu IP adresu z každej doméne AppDomain vo vašom proces.

executionTimeout

Technológia ASP.net ju používa nasledovné nastavenie konfigurácie obmedziť čas vykonania žiadosti:
<httpRuntime executionTimeout="90"/>
Tento limit môžete nastaviť aj pomocou vlastnosť Server.ScriptTimeout .

Poznámka Ak zvýšite hodnotu parametra executionTimeout , môže tiež musíte upraviť processModel responseDeadlockInterval nastavenie parametra.

Odporúčania

Nastavenia, ktoré sú Odporúčané v tejto časti nemusia pracovať pre všetky aplikácie. Avšak, tieto dodatočné informácie vám môžu pomôcť vykonajte potrebné úpravy.

Ak Robíš jeden volaní webovej služby na jednu IP adresu z každej stránky ASPX, Spoločnosť Microsoft odporúča, že používate nasledovné nastavenia konfigurácie:
  • Hodnoty maxWorkerThreads parameter a maxIoThreads parameter nastavte na 100.
  • Nastavte hodnotu maxconnection parameter 12 *N (kde N je počet CPU, máte).
  • Nastavte hodnoty parametra minFreeThreads na 88 *N a parameter minLocalRequestFreeThreads na76 *N.
  • Nastaviť hodnota minWorkerThreads k 50. Pamätajte si, že minWorkerThreads nie je v konfiguračnom súbore štandardne. Musíte ho pridať.
Niektoré Tieto odporúčania zahŕňajú jednoduchý vzorec, ktorý zahŕňa číslo CPU na serveri. Premenná, ktorá predstavuje počet procesorov v vzorce je N. Pre toto nastavenie, ak máte hyperthreading zapnuté, počet logických procesorov musíte použiť namiesto počtu fyzických procesorov. Napríklad, ak máte štyri-procesor server s hyperthreading povolené, potom hodnota N Vzorce budú 8 namiesto 4.

Poznámka Ak použijete túto konfiguráciu, môžete spustiť na maximálne 12 ASP.NET požiadaviek za CPU v rovnakej dobe, pretože 100-88 = 12. Preto najmenej 88 *N pracovník Vlákna a 88 *N dokončenie port vlákna sú k dispozícii pre iné použitie (napríklad pre webové služby volania).

Napríklad, máte server so 4 procesormi a hyperthreading povolené. Na základe týchto vzorcov, mali by ste použiť nasledujúce hodnoty pre konfiguračné nastavenia, ktoré sú uvedené 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>

Tiež, ak používate túto konfiguráciu, 12 pripojenia sú k dispozícii každý Procesor za IP adresu každej doméne AppDomain. Preto v nasledujúcich scenár, veľmi malú sváru dochádza pri žiadosti čakajú pripojenia a ThreadPool nie je vyčerpaná:
  • Web hostitelia iba jednu žiadosť (aplikačnej domény).
  • Každá žiadosť o stránke ASPX robí jedna požiadavka webovej služby.
  • Všetky žiadosti majú rovnakú IP adresu.
Avšak, ak používate túto konfiguráciu, scenáre zahŕňajú jeden z týchto bude pravdepodobne používať príliš veľa pripojení:
  • Žiadosti sú na viac adries IP.
  • Žiadosti sú presmerované (302 Stavový kód).
  • Vyžadujú overenie.
  • Žiadosti sú vyrobené z viacerých domény AppDomain.
V týchto prípadoch, je to dobrý nápad použiť nižšiu hodnotu pre maxconnection parameter a vyššej hodnoty pre minFreeThreads parameter a minLocalRequestFreeThreads parameter.

Stav

Toto správanie je zámerné.

Ďalšie informácie

Ak dochádza k slabej výkonnosti a sváru v súčasti IIS 7.0 s ASP.NET, prejdite na nasledujúci Microsoft blogy:
ASP.NET vlákno využitie na IIS 7.5, IIS 7.0 a IIS 6.0

ASP.net visieť v súčasti IIS 7.0

Odkazy

Ďalšie informácie nájdete na nasledujúcej webovej lokalite webová lokalita Microsoft Developer Network (MSDN):
Zlepšenie výkonnosti ASP.NET

Vlastnosti

ID článku: 821268 - Posledná kontrola: 6. februára 2013 - Revízia: 1.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft .NET Framework 2.0
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
Kľúčové slová: 
kbprb kbmt KB821268 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem: 821268

Odošlite odozvu

 

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