gpt4 book ai didi

.net - 企业服务器 WCF 压力/线束测试

转载 作者:可可西里 更新时间:2023-11-01 16:19:28 28 4
gpt4 key购买 nike

我写信是为了问一个关于 WCF 性能的问题。

<强>1。背景

我们有一个在 .NET 3.5 上运行的客户端-服务器系统。服务器是 C# 服务,客户​​端是 silverlight 应用

我写了一个压力测试器,它是一个 winforms 应用程序,并且像这样工作:

  • 它生成工作进程
  • 工作进程触发不同应力载荷 [eg for (i=0;i<100;i++)
    Send(payload)]
  • 服务运行为 [ServiceBehavior(InstanceContextMode
    =InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)]
    .
  • 所有超时(操作,发送接收,..)已设置为最大值
  • serviceThrottling:
    maxConcurrentSessions="200"
  • 消息跟踪已启用并打印一切

<强>2。问题

在达到一些阈值(取决于压力测试负载和测试环境)后,我的工作进程(正常的 .NET 3.5 C# 控制台应用程序)开始抛出异常。最初我遇到了 timeoutExceptions,但经过大量阅读和调整 session 后,我只遇到了两个异常(仅在非常高的负载下)

  • 底层连接已关闭:预期的连接keep alive 被服务器关闭了。
  • 接收时发生错误对 的 HTTP 响应。这可能是由于到服务端点绑定(bind)不使用 HTTP 协议(protocol)。这可以也可能是由于 HTTP 请求上下文被服务器中止(可能是由于服务关闭向下)。查看服务器日志了解更多详细信息。

除此之外,我还看到大量消息丢失。服务器永远不会失败(这很好)。我认为服务器只是拒绝它无法处理的消息。

<强>3。采取的行动

我阅读了很多文章并调整了很多参数(包括节流、超时等)。例如,我已经尝试了这里的所有建议:http://www.codeproject.com/KB/WCF/WCFThrottling.aspx

我确实获得了性能提升,但取决于我运行服务器的环境,我将达到此上限并开始拒绝消息。

跟踪日志中没有报告任何错误

<强>4。理想情况下...

...我希望有一个服务器随着负载的增加而变慢,但不会错过消息。 (即,如果有 500 位其他人正在使用该服务,如果一个客户需要 10 秒才能得到答复,这没问题)

在 WCF over Http 和单线程、单上下文服务下这可能吗?我是否缺少此处的设置,或者我是否达到了上限并获得了预期的 WCF 行为?

注意:我试过使用 ConcurrencyMode.Multiple .我确实得到了改进(即需要更多负载才能达到上限)但我确实遇到了相同的异常。

最佳答案

您最好的选择是使用 netMsmqBinding . Here is an overview如果您不熟悉它是如何工作的。此绑定(bind)将允许您的服务使用 MSMQ 对超额负载进行排队,这样消息就不会丢失。这应该可以解决您的问题。

关于.net - 企业服务器 WCF 压力/线束测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5592605/

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