【问题标题】:How to get started with WCF Performance profiling如何开始使用 WCF 性能分析
【发布时间】:2010-10-14 19:34:09
【问题描述】:

我正在尝试弄清楚如何分析 WCF 服务,以便识别任何瓶颈。
我在网上找到了一些信息,但没有任何假设 没有先验知识 这就是我所在的位置。

推荐的免费工具有哪些?

- visual studio tools
- clrprofiler 

Here 是我发现使用 vsperfcmd.exe 来分析 wcf 服务的信息,据此它非常简单,但我需要填补从哪里开始的空白。我的假设是将 VsPerfCLREnv 和 VsPerfCmd 复制到托管我的 wcf 服务的服务器并执行一些我不太确定的配置步骤。我也不太确定如何查看调用堆栈来评估每个调用的性能。

clrprofiler 似乎更简单一些。我假设我会将 clrprofiler.exe 复制到服务器 File->Profile Service 并添加名称和启动/停止命令。 (这是一个友好的名称或文件名还是服务显示名称?)我假设我将针对该服务运行我的测试,并且我可以在 clrprofiler 中看到调用堆栈。听起来对吗?

[编辑]
我对测试网络不是很感兴趣,因为这是在测试服务器上,这是一个大型 wcf 项目,上面有多个开发人员,我无法仅出于监控性能的目的对项目进行更改。我想专注于其中的实际方法的性能。

非常感谢任何有关入门的帮助。

【问题讨论】:

  • 您也可以使用“Perfmon” - www.codeproject.com/Articles/431917/WCF-Service-Performance-Monitoring-using-Perfmon

标签: wcf performance visual-studio-2010 profiling instrumentation


【解决方案1】:

对于 WCF,仅在通道堆栈上发生一堆事情(安全、反序列化、格式化等)时分析您的代码是不够的。一种可视化的好方法是在详细级别使用 WCF 跟踪,然后使用 service trace viewer 查看消息处理的每个步骤所花费的时间。阅读此处了解如何configure and use WCF tracing。这是帮助我诊断 WCF 问题的最重要的事情。

当然,所有其他代码分析、数据库分析等也是有效的方法。您甚至可以使用SoapUI 之类的工具来测试您的网络通信和客户端性能开销,以获得更多的端到端基准。

【讨论】:

  • 是的。我处理异步情况的方式是 1) 在线程上使用随机暂停以确保它们尽可能高效,然后 2) 进行详细的消息记录,跨进程合并。我不会说研究消息痕迹很容易,但它是有效的。对我来说,异步消息传递协议的运行速度之快令人惊讶。
  • 谢谢,我正在研究 wcf 跟踪,但我不确定要在输出中查找什么。我主要对服务器与网络通信和客户端的性能瓶颈感兴趣。我想分析一些目标方法,看看哪里可以改进。
  • 如果您在服务跟踪查看器中打开跟踪,您将看到肥皂消息处理中的所有活动。其中之一是执行用户代码活动并查看花费了多少时间。这将使您了解代码执行所需的时间。但实际上,如果您需要深入了解代码中的性能瓶颈,则必须使用像内置的 Visual Studio 分析器或 RedGate 出色的 nants 性能分析器这样的分析器。
  • 我就是这么想的。我正在尝试使用 VS2010 中的内置分析器,但是一旦我将 dll 添加到解决方案并将其标记为仪器,我就无法再连接到该服务。我可以在服务器上看到正在备份原始 dll 并放置新副本。
【解决方案2】:

我学到的一些东西可能会有帮助:

您无法远程配置服务,即使通过您的本地网络也是如此。探查器必须与服务在同一台机器上运行。 (这实际上花了我很长时间才弄明白。也许对你来说很明显,但它从来没有说清楚,所以我一直在尝试这样做)

Visual Studio 无法让我分析我的 WCF 服务。我能够从 VS 分析器团队获得一些帮助,但从未找到可行的解决方案。

VS 连接和断开分析器的速度很慢,并且经常检测我的二进制文件并使它们处于损坏状态。

.net 二进制文件不需要检测,因为它们包含方法的元数据,这很奇怪,Visual Studio 一直在尝试检测它们的二进制文件。

我也尝试了 VS 独立分析器,但这使用起来非常复杂,需要重新启动我的服务器。

我最终得到了一个内部分析器(在从团队获得私有构建之后),所以我不确定有多少分析器是为使用 WCF 服务而设计的。

我实际上将分析器设置为监视 WAS 服务,然后将我的其他二进制文件添加到分析器。

如果探查器是否连接,进程资源管理器在故障排除时很有用。用它查看inetinfo.exe环境

【讨论】:

    【解决方案3】:

    你能在调试器下运行它吗?

    你能忍受一个简单的、老式的、行得通的方法吗? Here's one.

    【讨论】:

      【解决方案4】:

      除了 Mike 的 cmets,您还可以使用内置的 WCF 性能计数器查看许多与性能相关的指标,还可以查看 WCF 跟踪上的调用时间。一旦您知道哪些操作“慢”,通常比使用通用分析器更容易为这些操作添加一些自定义计时/日志记录代码。这来自曾经从事商业分析的人。

      【讨论】:

        【解决方案5】:

        您应该研究的工具:svctracelogviewer(并在您的服务和客户端中打开跟踪)。用于模拟负载(并进行分析)的 SoapUI 和出色的 HTTP 嗅探器/诊断工具 Fiddler。

        【讨论】:

        • 你知道如何使用 fiddler 来监控 wcf 流量吗?我正在使用 wcf 测试客户端,在 fiddler 中没有得到任何信息。
        • 您是否尝试对本地主机上运行的服务使用 Fiddler?如果是这样,请查看文档以使其正常工作。
        • 服务托管在测试服务器上。现在我考虑了一下,我不确定 fiddler 是否可以这样做,因为该服务正在使用 tcp 绑定。也许这是一个更好的问题留给一个新线程。
        猜你喜欢
        • 2011-01-19
        • 2013-10-19
        • 2021-07-14
        • 1970-01-01
        • 1970-01-01
        • 2014-03-20
        • 2011-05-18
        • 1970-01-01
        相关资源
        最近更新 更多