Ganh đua, hi?u su?t t?m nh?n th?p và deadlocks khi b?n th?c hi?n cu?c g?i đ?n b?n ghi Dịch vụ Web t? m?t ?ng d?ng ASP.NET

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 821268 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

Tri?u ch?ng

Khi b?n th?c hi?n cu?c g?i đ?n b?n ghi Dịch vụ Web t? m?t ?ng d?ng Microsoft ASP.NET, b?n có th? g?p ph?i ganh đua, hi?u su?t t?m nh?n th?p và deadlocks. Khách hàng có th? báo cáo r?ng yêu c?u ng?ng đáp ?ng (ho?c "treo") ho?c m?t m?t th?i gian r?t dài đ? th?c hi?n. N?u m?t b? t?c nghi ng?, tr?nh công nhân có th? đư?c tái ch?. B?n có th? nh?n đư?c các thông báo sau đây trong Nh?t k? s? ki?n ?ng d?ng.
  • N?u b?n đang s? d?ng Internet Information Services (IIS) 5.0, b?n nh?n đư?c các thông báo sau đây trong Nh?t k? ?ng d?ng:

       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.

  • N?u b?n đang s? d?ng IIS 6.0, b?n nh?n đư?c các thông báo sau đây trong Nh?t k? ?ng d?ng:

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

  • N?u b?n đang s? d?ng IIS 6.0, b?n nh?n đư?c các thông báo sau đây trong các b?n ghi h? th?ng:

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

B?n c?ng có th? nh?n đư?c l?i ngo?i l? sau thông báo khi b?n th?c hi?n m?t cu?c g?i đ?n phương pháp HttpWebRequest.GetResponse :
"System.InvalidOperationException: Đ? có không đ? ch? đ? mi?n phí trong các đ?i tư?ng ThreadPool đ? hoàn thành nh?ng ho?t đ?ng."
B?n c?ng có th? nh?n đư?c thông báo l?i sau ngo?i l? trong tr?nh duy?t:
"HttpException (0x80004005): yêu c?u h?n gi? ra."
Lưu ? Bài vi?t này c?ng áp d?ng cho các ?ng d?ng mà làm cho yêu c?u HttpWebRequest tr?c ti?p.

Nguyên nhân

V?n đ? này có th? x?y ra b?i v? ASP.NET gi?i h?n s? nhân viên ch? đ? và ch? đ? c?ng hoàn thành m?t cu?c g?i có th? s? d?ng đ? th?c hi?n yêu c?u.

Thông thư?ng, m?t cu?c g?i đ?n m?t b?n ghi Dịch vụ Web s? d?ng m?t nhân viên s?i đ? th?c thi m? g?i yêu c?u và m?t hoàn thành c?ng ch? đ? nh?n đư?c g?i l?i t? các b?n ghi Dịch vụ Web. Tuy nhiên, n?u các yêu c?u đư?c chuy?n hư?ng ho?c yêu c?u xác th?c, các cu?c g?i có th? s? d?ng nhi?u như hai nhân viên ch? đ? và hai hoàn thành c?ng ch? đ?. V? v?y, b?n có th? th?i ThreadPool đư?c qu?n l? khi nhi?u Web b?n ghi d?ch v? cu?c g?i x?y ra cùng m?t lúc.

Ví d?, gi? s? r?ng ThreadPool đư?c gi?i h?n đ?n 10 nhân viên ch? đ? và ch? đ? 10 nhân viên hi?n đang th?c thi m? mà ch? đ?i cho m?t g?i l?i đ? th?c hi?n. G?i l?i không bao gi? có th? th?c hi?n, b?i v? b?t k? m?c công vi?c nào đư?c x?p hàng đ?i đ? ThreadPool đang b? ch?n cho đ?n khi m?t ch? đ? tr? nên có s?n.

M?t ngu?n ti?m năng c?a ganh đua là tham s? maxconnection không gian tên System.Net s? d?ng đ? h?n ch? s? lư?ng k?t n?i. Nói chung, gi?i h?n này ho?t đ?ng như mong đ?i. Tuy nhiên, n?u nhi?u ?ng d?ng c? g?ng đ? làm cho nhi?u yêu c?u m?t đ?a ch? IP duy nh?t t?i cùng m?t th?i gian, ch? đ? có th? ph?i ch? đ?i cho k?t n?i có s?n.

Gi?i pháp

Đ? gi?i quy?t nh?ng v?n đ? này, b?n có th? đi?u ch?nh các tham s? sau đây trong các t?p tin Machine.config đ? t?t nh?t phù h?p v?i t?nh h?nh c?a b?n:
  • maxWorkerThreads
  • minWorkerThreads
  • maxIoThreads
  • minFreeThreads
  • minLocalRequestFreeThreads
  • maxconnection
  • executionTimeout
Đ? thành công gi?i quy?t nh?ng v?n đ? này, có nh?ng hành đ?ng sau đây:
  • Gi?i h?n s? lư?ng yêu c?u ASP.NET có th? th?c hi?n t?i đ?ng th?i kho?ng 12 cho m?i CPU.
  • Cho phép web site b?n ghi d?ch v? callbacks đ? t? do s? d?ng ch? đ? trong ThreadPool.
  • Ch?n m?t giá tr? thích h?p cho tham s? maxconnections . Cơ s? l?a ch?n c?a b?n v? s? lư?ng các đ?a ch? IP và AppDomains đư?c s? d?ng.
Lưu ? Các khuy?n ngh? đ? gi?i h?n s? lư?ng yêu c?u ASP.NET-12 m?i CPU là m?t chút tùy ?. Tuy nhiên, các gi?i h?n này đ? ch?ng minh đ? làm vi?c t?t cho H?u h?t các ?ng d?ng.

maxWorkerThreadsmaxIoThreads

ASP.NET s? d?ng cài đ?t chuyên bi?t hai c?u h?nh sau đ? h?n ch? s? lư?ng nhân viên ch? đ? và ch? đ? hoàn thành t?i đa s? d?ng:
<processModel maxWorkerThreads="20" maxIoThreads="20">
Tham s? maxWorkerThreads và tham s? maxIoThreads là hoàn toàn nhân s? CPU. Cho Ví d?, n?u b?n có hai b? vi x? l?, s? nhân viên ch? đ?, t?i đa là Các tùy ch?n sau:
2 * maxWorkerThreads

minFreeThreadsminLocalRequestFreeThreads

ASP.NET c?ng ch?a các c?u h?nh sau cài đ?t chuyên bi?t xác đ?nh bao nhiêu nhân viên ch? đ? và hoàn thành c?ng ch? đ? ph?i có s?n đ? B?t đ?u m?t yêu c?u t? xa ho?c m?t yêu c?u đ?a phương:
<httpRuntime minFreeThreads="8" minLocalRequestFreeThreads="8">
N?u không có đ?y đ? các ch? đ? có s?n, yêu c?u đư?c x?p hàng đ?i cho đ?n khi đ? ch? đ? đư?c mi?n phí đ? th?c hi?n yêu c?u. V? v?y, ASP.NET s? không th?c hi?n nhi?u hơn s? yêu c?u, sau cùng m?t lúc:
(maxWorkerThreads*s? CPU)-minFreeThreads
Lưu ? Tham s? minFreeThreads và tham s? minLocalRequestFreeThreads là không hoàn toàn nhân s? CPU.

minWorkerThreads

Như c?a ASP.NET 1.0 Service Pack 3 và ASP.NET 1.1, ASP.NET c?ng ch?a các t?p c?u h?nh sau đây xác đ?nh như th? nào nhi?u nhân viên ch? đ? có th? đư?c th?c hi?n có s?n ngay l?p t?c đ? ph?c v? m?t t? xa yêu c?u.
<processModel minWorkerThreads="1">
Ch? đ? đó đư?c đi?u khi?n b?i đi?u này thi?t l?p có th? đư?c t?o ra t?i m?t t?c đ? nhanh hơn nhi?u so v?i ch? đ? c?a công nhân đư?c t?o ra t? các CLR m?c đ?nh "ch? đ?-ch?nh" kh? năng. cài đ?t chuyên bi?t này cho phép ASP.NET yêu c?u b?n ghi d?ch v? có th? đ?t nhiên đi?n vào hàng đ?i yêu c?u ASP.NET do m?t h?n trên m?t k?t thúc tr? l?i máy ch?, m?t burst đ?t ng?t c?a các yêu c?u t? phía khách hàng, ho?c m?t cái g? đó tương t? mà s? gây ra s? gia tăng đ?t ng?t trong s? các yêu c?u trong hàng đ?i. Các giá tr? m?c đ?nh cho tham s? minWorkerThreads là 1. Chúng tôi khuyên b?n đ?t giá tr? cho tham s? minWorkerThreads đ? giá tr? sau đây.
minWorkerThreads = maxWorkerThreads / 2
theo m?c đ?nh, tham s? minWorkerThreads là không hi?n di?n trong c? hai t?p tin Web.config ho?c các t?p tin Machine.config. cài đ?t chuyên bi?t này hoàn toàn nhân v?i s? CPU.

maxconnection

Tham s? maxconnection xác đ?nh làm th? nào nhi?u k?t n?i có th? đư?c th?c hi?n cho m?t đ?a ch? IP c? th?. Tham s? này s? xu?t hi?n như sau:
<connectionManagement>
    <add address="*" maxconnection="2">
    <add address="http://65.53.32.230" maxconnection="12">
</connectionManagement>
N?u m? c?a ?ng d?ng tài li?u tham kh?o các ?ng d?ng b?ng tên máy (ứng dụng) phục vụ thay v? đ?a ch? IP, tham s? này s? xu?t hi?n như sau:
<connectionManagement>
    <add address="*" maxconnection="2">
    <add address="http://hostname" maxconnection="12">
</connectionManagement>
Cu?i cùng, n?u các ?ng d?ng đư?c lưu tr? trên m?t c?ng khác hơn so v?i 80, các tham s? có bao g?m các c?ng không chu?n trong URI, tương t? như sau đây:
<connectionManagement>
    <add address="*" maxconnection="2">
    <add address="http://hostname:8080" maxconnection="12">
</connectionManagement>
Các cài đ?t chuyên bi?t cho các tham s? đư?c th?o lu?n trư?c đó trong bài vi?t này là t?t c? ? c?p đ? quá tr?nh. Tuy nhiên, cài đ?t chuyên bi?t tham s? maxconnection áp d?ng đ?n m?c đ? AppDomain. theo m?c đ?nh, b?i v? thi?t đ?t này áp d?ng cho m?c đ? AppDomain, b?n có th? t?o t?i đa hai k?t n?i đ?n m?t đ?a ch? IP c? th? t? m?i AppDomain ? c?a b?n quá tr?nh.

executionTimeout

ASP.NET s? d?ng các t?p c?u h?nh sau đây đ? gi?i h?n th?i gian th?c hi?n yêu c?u:
<httpRuntime executionTimeout="90"/>
B?n c?ng có th? thi?t l?p các gi?i h?n này b?ng cách s? d?ng các tài s?n Server.ScriptTimeout .

Lưu ? N?u b?n tăng giá tr? c?a tham s? executionTimeout , b?n c?ng có th? c?n ph?i s?a đ?i processModel responseDeadlockInterval cài đ?t chuyên bi?t tham s?.

Khuy?n ngh?

Các thi?t đ?t đư?c khuy?n cáo trong ph?n này có th? không làm vi?c cho T?t c? các ?ng d?ng. Tuy nhiên, các thông tin b? sung sau có th? giúp b?n th?c hi?n nh?ng đi?u ch?nh thích h?p.

N?u b?n đang làm cho m?t web site b?n ghi d?ch v? g?i đ?n m?t đ?a ch? IP duy nh?t t? m?i trang ASPX, Microsoft khuy?n cáo b?n nên s? d?ng các cài đ?t chuyên bi?t c?u h?nh sau:
  • Thi?t l?p giá tr? c?a tham s? maxWorkerThreads và tham s? maxIoThreads đ?n 100.
  • Thi?t l?p giá tr? c?a tham s? maxconnection đ? 12 *N (nơi N là s? CPU mà b?n có).
  • Thi?t l?p giá tr? c?a tham s? minFreeThreads đ? 88 *N và các tham s? minLocalRequestFreeThreads đ?76 *N.
  • Thi?t l?p giá tr? c?a minWorkerThreads đ?n 50. H?y nh? r?ng, minWorkerThreads không ph?i là trong t?p tin c?u h?nh theo m?c đ?nh. B?n ph?i thêm nó.
M?t s? nh?ng khuy?n ngh? liên quan đ?n m?t công th?c đơn gi?n mà liên quan đ?n s? c?a CPU trên m?t máy ch?. Bi?n đ?i di?n cho s? CPU trong các công th?c là N. Đ?i v?i các cài đ?t chuyên bi?t, n?u b?n có hyperthreading đư?c kích ho?t, b?n ph?i s? d?ng s? lư?ng h?p l? CPU thay v? s? lư?ng v?t l? CPU. Ví d?, n?u b?n có m?t máy ch? 4-b? x? l? v?i hyperthreading kích ho?t, sau đó giá tr? c?a N trong các công th?c s? có 8 thay v? 4.

Lưu ? Khi b?n s? d?ng c?u h?nh này, b?n có th? th?c hi?n t?i đa là 12 ASP.NET yêu c?u m?i CPU t?i cùng m?t th?i gian b?i v? 100-88 = 12. V? v?y, ít 88 *N nhân viên ch? đ? và 88 *N hoàn thành c?ng ch? đ? có s?n cho các ?ng d?ng khác (ch?ng h?n như Web b?n ghi d?ch v? callbacks).

Ví d?, b?n có m?t máy ch? v?i b?n b? vi x? l? và hyperthreading đư?c kích ho?t. D?a trên các công th?c này, b?n s? s? d?ng các giá tr? sau cho các cài đ?t chuyên bi?t c?u h?nh đư?c đ? c?p trong bài vi?t này.
<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>

Ngoài ra, khi b?n s? d?ng c?u h?nh này, 12 k?t n?i có s?n m?i CPU cho đ?a ch? IP cho m?i AppDomain. V? v?y, trong nh?ng đi?u sau đây trư?ng h?p, r?t ít ganh đua x?y ra khi yêu c?u đang ch? đ?i k?t n?i, và ThreadPool không ph?i ki?t s?c:
  • Các web site lưu tr? ch? có m?t ?ng d?ng (AppDomain).
  • M?i yêu c?u cho m?t trang ASPX làm cho m?t yêu c?u b?n ghi Dịch vụ Web.
  • T?t c? yêu c?u ph?i cùng m?t đ?a ch? IP.
Liên quan Tuy nhiên, khi b?n s? d?ng c?u h?nh này, k?ch b?n mà đ?n m?t trong nh?ng đi?u sau đây có th? s? s? d?ng quá nhi?u k?t n?i:
  • Yêu c?u ph?i nhi?u đ?a ch? IP.
  • Yêu c?u là chuy?n hư?ng (m? trạm đậu 302).
  • Yêu c?u yêu c?u xác th?c.
  • Yêu c?u đư?c th?c hi?n t? nhi?u AppDomains.
Trong nh?ng t?nh hu?ng, nó là m?t ? tư?ng t?t đ? s? d?ng m?t giá tr? th?p nh?t tham s? maxconnection và cao hơn giá tr? cho tham s? minFreeThreads và tham s? minLocalRequestFreeThreads .

T?nh tr?ng

Đi?u này hành vi là do thi?t k?.

Thông tin thêm

N?u b?n đang g?p hi?u su?t t?m nh?n th?p và ganh đua trên IIS 7.0 cùng v?i ASP.NET, đi đ?n blog Microsoft sau đây:
Ch? đ? ASP.NET s? d?ng IIS 7.5, IIS 7.0 và IIS 6.0

ASP.net Hang trong IIS 7.0

Tham kh?o

Đ? bi?t thêm chi ti?t, h?y vào web site Microsoft Developer Network (MSDN) sau đây:
C?i thi?n hi?u su?t c?a ASP.NET

Thu?c tính

ID c?a bài: 821268 - L?n xem xét sau cùng: 06 Tháng Hai 2013 - Xem xét l?i: 3.0
Áp d?ng
  • Microsoft .NET Framework 2.0
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
T? khóa: 
kbprb kbmt KB821268 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này: 821268

Cung cấp Phản hồi

 

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