我有一个使用内置ServiceHost托管的WCF net.tcp服务,在进行一些压力测试时,我遇到了奇怪的行为。第一次发送一堆请求时,5到10个请求会很快得到响应,其余的则在大约2秒的间隔后返回。第二次发送请求时,10到20个请求会很快得到响应,其余的则在2秒的间隔后返回。
以上情况会一直重复,直到我能够快速地得到超过100个请求的响应,但如果我等待一分钟左右,服务的内存使用量就会下降,请求的返回速度就会恢复到5-10个迅速返回。
我正在测试的服务有一个小延迟,这样我就可以同时获得许多开放的连接,如果去掉这个延迟,请求会非常快地返回,可能同时只有2-5个连接是打开的。这个延迟是为了模拟数据库连接和其他出站操作。
从行为上看,它似乎是ServiceHost在分配某些东西,线程,类实例,但我无法弄清楚它是什么。
我可以在客户端中设置一个定时器,调用服务以保持其工作,但这似乎是一个不好的解决方案。
如果我对服务进行高持续负载,则所有请求都会迅速处理,但如果我有一个低活动期,然后涌入连接,则服务将变慢。
我的问题是:在WCF服务高负载下分配了什么,以及如何配置服务以预分配更多被分配的东西。
编辑: 我进行了更多测试,并查看了进程的任务管理器,当ServiceHost“休息”时,有10个线程打开,但当我开始发送请求时,线程计数会增加。只要线程计数很高,ServiceHost就可以快速处理传入的请求,但如果我暂停发送请求,则打开的线程计数减少,随后的请求开始花费更长的时间来处理。
现在,我该如何告诉ServiceHost保持一堆线程打开?或者比默认值10-12更多?
以上情况会一直重复,直到我能够快速地得到超过100个请求的响应,但如果我等待一分钟左右,服务的内存使用量就会下降,请求的返回速度就会恢复到5-10个迅速返回。
我正在测试的服务有一个小延迟,这样我就可以同时获得许多开放的连接,如果去掉这个延迟,请求会非常快地返回,可能同时只有2-5个连接是打开的。这个延迟是为了模拟数据库连接和其他出站操作。
从行为上看,它似乎是ServiceHost在分配某些东西,线程,类实例,但我无法弄清楚它是什么。
我可以在客户端中设置一个定时器,调用服务以保持其工作,但这似乎是一个不好的解决方案。
如果我对服务进行高持续负载,则所有请求都会迅速处理,但如果我有一个低活动期,然后涌入连接,则服务将变慢。
我的问题是:在WCF服务高负载下分配了什么,以及如何配置服务以预分配更多被分配的东西。
编辑: 我进行了更多测试,并查看了进程的任务管理器,当ServiceHost“休息”时,有10个线程打开,但当我开始发送请求时,线程计数会增加。只要线程计数很高,ServiceHost就可以快速处理传入的请求,但如果我暂停发送请求,则打开的线程计数减少,随后的请求开始花费更长的时间来处理。
现在,我该如何告诉ServiceHost保持一堆线程打开?或者比默认值10-12更多?