我注意到当超过10个并发客户端请求我的API端点时,响应时间会显着增加。
我正在使用IIS 7.5来托管我的MVC Web API应用程序(.Net 4.5.2)
我已经创建了一个简单的API动作来检查:
public SimpleResponse<bool> Get()
{
Thread.Sleep(50);
return new SimpleResponse<bool>
{
Value = true
};
}
以下是我的测试客户端的外观:
private static void TestClientConnections(int clients)
{
var client = new HttpClient();
for (int i = 0; i < clients; i ++)
{
Task.Factory.StartNew(() =>
{
Stopwatch sw = new Stopwatch();
while (true)
{
sw.Restart();
var res = client.GetAsync("http://localhost:98/ping").Result;
sw.Stop();
Console.WriteLine("{0}ms", sw.ElapsedMilliseconds);
}
}, TaskCreationOptions.LongRunning);
}
}
运行10个客户端时的控制台输出:
62ms
63ms
62ms
61ms
63ms
64ms
63ms
...
运行30个客户端时的控制台输出:
187ms
187ms
187ms
187ms
186ms
186ms
186ms
...
为了克服这个问题,我试图做些什么:
1)考虑到这是客户端问题,试图将System.Net.ServicePointManager.DefaultConnectionLimit设置为大号;
2)试图改变machine.config中的线程限制:
<processModel maxWorkerThreads="200" maxIoThreads="200" minWorkerThreads="150"/>
3)试图增加最大连接数:
<system.net>
<connectionManagement>
<add address="*" maxconnection="2000"/>
</connectionManagement>
</system.net>
4)试图使api动作异步。
上面没有提到的东西对我没有帮助......有什么想法吗?
我真的需要至少处理100个并发客户端。