gpt4 book ai didi

wcf - WCF 服务(托管在 IIS 中)的性能问题受到 20 个并发请求的影响

转载 作者:行者123 更新时间:2023-12-04 05:54:58 24 4
gpt4 key购买 nike

问题:
我有一个 WCF 服务,我正在尝试使用 JMeter 进行性能测试我注意到,当发送更多并发请求时,服务响应时间会显着增加。第一个并发请求在预期的时间内返回,但每个后续请求都需要越来越多的时间 - 因此最后一个请求可能会花费第一个请求的两倍。

这是在 JMeter 中运行的屏幕截图:
Performance Test Results

代码:
我已将 WCF 服务剥离到最低限度,因此所有服务方法只包含一个 Thread.Sleep() 来模拟稍长的运行过程。

[ServiceContract]
public interface IAvailabilityService
{
[OperationContract]
Thing GetSomething(Request request)
}

[ServiceBehavior(
InstanceContextMode = InstanceContextMode.PerCall,
AddressFilterMode = AddressFilterMode.Any)]
public class AvailabilityService : IAvailabilityService
{
public Thing GetSomething(Request request)
{
Thread.Sleep(20000);
return new Thing();
}
}

服务配置如下:
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<services>
<service name="MyService.AvailabilityService"
behaviorConfiguration="DefaultServiceBehavior">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="bindingConfig"
contract="MyService.IAvailabilityService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DefaultServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="bindingConfig">
<security mode="None">
<transport clientCredentialType="None" />
<message establishSecurityContext="false" />
</security>
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
</configuration>

我还尝试将服务配置为作为其他标准 HTTP 绑定(bind)运行。此外,我尝试在绑定(bind)配置上提高服务限制级别(尽管我确信对于 20 个请求,默认值应该没问题)。

服务设置:
该服务在 .NET 3.5 中的 Windows Server 2008 R2 上的 IIS 6.1 中运行。
尽管我们在 IIS 7 上也看到了相同的行为。

服务跟踪:
我打开了跟踪,这表明服务总是需要大约 20 秒来处理每个响应,但是连接上的接收字节有一个交错的开始时间,这反射(reflect)了 JMeter 报告的时间差异。

这是否表明 IIS 服务激活存在滞后?它不可能是 WCF 中的并发问题,因为您希望最后一个线程的执行是第一个线程的 20 倍。

提前致谢

伊恩

更新
我设法通过增加 IIS 中的工作进程数以匹配我希望服务处理的并发请求数 (20) 来获得一致的响应 - 使站点成为 Web Garden .虽然令我惊讶的是,您需要这样做才能从 WCF 获得一致的性能水平。

如果有人有更好的想法,我会将这个问题再留几天。

最佳答案

这已通过增加 IIS 中应用程序池的工作进程数来解决。如this博客文章提到,WCF 中可能长时间运行的进程必须由多个工作进程支持。

Web 服务器上还有一个平衡行为,以确保工作进程不会超过机器 RAM 并占用虚拟内存,这也会减慢处理速度。

关于wcf - WCF 服务(托管在 IIS 中)的性能问题受到 20 个并发请求的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9615745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com