मैं निम्नलिखित कोड है कि JMeter साथ मैं बेंचमार्क और मेरे स्थानीय होस्ट मशीन पर प्रति सेकंड 3000 के बारे में अनुरोध प्राप्त (await
जानबूझकर गायब है तुल्यकालिक चलाने के लिए) है:बेंचमार्किंग ASP.NET समवर्ती अनुरोध खराब परिणाम
public async Task<HttpResponseMessage> Get()
{
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Content = new StringContent(Thread.CurrentThread.ManagedThreadId.ToString(), Encoding.UTF8, "text/plain");
return resp;
}
समस्या यह है कि जब मैं एक सेकंड नीचे की तरह के लिए अनुरोध रोकते हैं, किसी कारण से प्रवाह क्षमता प्रत्येक w3wp.exe प्रक्रिया के लिए प्रति सेकंड 10 अनुरोध करने के लिए नीचे (फिर await
जानबूझकर गायब है तुल्यकालिक चलाने के लिए) है:
public async Task<HttpResponseMessage> Get()
{
Task.Delay(1000).Wait();
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Content = new StringContent(Thread.CurrentThread.ManagedThreadId.ToString(), Encoding.UTF8, "text/plain");
return resp;
}
यहां तक कि जब मैं await
प्रयोग करते हैं कोई फर्क नहीं है और प्रति सेकंड 10 अनुरोधों बिल्कुल सुधार नहीं होता:
public async Task<HttpResponseMessage> Get()
{
await Task.Delay(1000);
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Content = new StringContent(Thread.CurrentThread.ManagedThreadId.ToString(), Encoding.UTF8, "text/plain");
return resp;
}
मैं सभी config सेटिंग्स की कोशिश की और कुछ भी नहीं सब पर किसी भी परिवर्तन बनाता है: `
web.config
<system.net>
<connectionManagement>
<add address="*" maxconnection="65400" />
</connectionManagement>
</system.net>
aspnet.co nfig
<system.web>
<applicationPool
maxConcurrentThreadsPerCPU="100" />
</system.web>
machine.config
<processModel
autoConfig="false"
memoryLimit="70"
maxWorkerThreads="100"
maxIoThreads="100" />
कॉन्फ़िगरेशन दोनों x86 और x64 के लिए सेट कर रहे हैं
मैं मेम के 32 gigs और 4 शारीरिक कोर, Windows 10
सीपीयू 10% से अधिक भार नहीं जाता है प्रति सेकंड 10 अनुरोध बेंचिंग।
उपरोक्त कोड WEB API का उपयोग करता है, लेकिन निश्चित रूप से मैं एक HTTP हैंडलर का उपयोग करके एक ही परिणाम पुन: पेश करता हूं।
एक भी सामान्य प्रयोजन वेबसर्वर एक अच्छी तरह से डिजाइन ASP.NET अनुप्रयोग लगभग 300 अनुरोध/वास्तविक उपयोगकर्ता बातचीत की रों कार्रवाई करेंगे का उपयोग करना। खराब आर्किटेक्टेड सिस्टम उन शून्यों को गायब होने लगते हैं। एक विंडोज सर्वर पर थ्रूपुट बढ़ाने के लिए आप "वेब बागान" का उपयोग करना चाहते हैं। आम तौर पर आपकी बाधा आपके वेबसर्वर नहीं है लेकिन आपकी साझा स्थिति (जैसे आपका डेटाबेस)। –
@ChrisMarisic मैं एक वेब बाग का उपयोग करता हूं – realPro
10 req/s एक अनुरोध निष्पादन अवधि के लिए 1 सेकंड किसी भी तकनीक के साथ सामान्य लगता है। और यह भी सामान्य है कि सीपीयू का उपयोग नहीं किया जाता है (अनुरोध किसी भी प्रोसेसिंग के बिना बस प्रतीक्षा करें)। आप क्या उम्मीद करते हैं? –