如何开始进行WCF性能分析

12

我正在尝试找出如何对WCF服务进行性能分析,以便确定任何瓶颈。


我在网上找到了一些信息,但没有假设没有先前的知识,这正是我的情况。

有哪些推荐的免费工具?

- visual studio tools
- clrprofiler 

这里有一些使用vsperfcmd.exe来分析wcf服务的信息,据此看来很简单,但我需要填补一些不太清楚的细节。我的假设是将VsPerfCLREnv和VsPerfCmd复制到托管我的wcf服务的服务器上,并执行一些配置步骤,但我不确定应该从哪里开始。我也不太确定如何查看调用栈以评估每个调用的性能。

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

[编辑]
由于这是在测试服务器上进行的,我并不是非常关心测试网络,而且这是一个大型的wcf项目,有多个开发人员参与其中,我无法为了监控性能而对项目进行更改。我想聚焦于其中实际方法的性能。

非常感谢任何开始分析的帮助。


5个回答

6
对于WCF来说,仅对代码进行分析是不够的,因为许多事情都发生在通道堆栈上(安全性、反序列化、格式化等)。一个很好的可视化方式是使用WCF跟踪(verbose级别),然后使用service trace viewer查看消息处理的每个步骤所需的时间。阅读此处以了解如何配置和使用WCF跟踪。这是诊断WCF问题最重要的一点。
当然,所有其他代码分析、数据库分析等方法也是有效的。您甚至可以使用SoapUI等工具测试网络通信和客户端性能开销,以进行更全面的端到端基准测试。

是的。我处理异步情况的方式是:1)在线程上使用随机暂停,以确保它们尽可能高效,然后2)进行详细的消息记录,跨进程合并。我不会说研究消息跟踪很容易,但它是有效的。对我来说,令人惊讶的是,异步消息传递协议可以如此快地运行。 - Mike Dunlavey
谢谢,我正在研究WCF跟踪,但我不确定输出中要查找什么。我主要关注服务器与网络通信和客户端的性能瓶颈。我有几个目标方法想要分析,并查看可能进行改进的地方。 - earthling
1
如果您在服务跟踪查看器中打开跟踪,您将看到SOAP消息处理中的所有活动。其中之一是“执行用户代码”活动,可以查看花费了多少时间。这将让您了解代码执行所需的时间。但是,如果您确实需要深入了解代码性能瓶颈,您必须使用分析器,例如内置的Visual Studio分析器或来自RedGate的优秀nant性能分析器。 - softveda
那正是我想到的。我正在尝试使用VS2010中内置的分析器,但是一旦我将dll添加到解决方案并标记为仪表化,我就无法再连接到服务。我可以在服务器上看到原始dll被备份并放置了一个新副本。 - earthling

5

以下是我学到的一些有用的东西:

无法通过本地网络远程分析服务。分析器必须在与服务相同的计算机上运行。(这实际上让我花费了相当长的时间才弄明白。也许对你来说很明显,但从未明确说明过,所以我一直试图这样做)

Visual Studio对于分析我的WCF服务没有起作用。我能从VS分析器团队得到一些帮助,但从未找到可行的解决方案。

VS连接和断开分析器速度缓慢,并且经常会使我的二进制文件变得不完整。

.net二进制文件不需要被仪器化,因为它们包含方法的元数据,奇怪的是Visual Studio一直试图对我的二进制文件进行仪器化,导致损坏。

我还尝试过VS独立分析器,但这非常复杂并需要重新启动我的服务器。

最终我设法让内部分析器工作了(在从团队获取私有构建之后),所以我不确定有多少分析器被设计用于与WCF服务一起使用。

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

当排除分析器是否连接时,进程资源管理器非常有用。使用它查看inetinfo.exe环境。


1

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

你能接受一个简单、老式的方法,它“只是有效”的吗?这里有一个。


1
除了Mike的评论之外,您还可以使用内置的WCF性能计数器来查看一些与性能相关的指标,并且您还可以在WCF跟踪中查看调用时间。一旦您知道哪些操作速度较慢,通常比使用通用分析工具更容易添加一些自定义的计时/日志记录代码来处理这些操作。这是来自曾经从事商业分析工具开发的人的建议。

1
你应该关注的工具:svctracelogviewer(并在服务和客户端中打开跟踪)。SoapUI用于模拟负载(并进行分析),Fiddler是一款出色的HTTP嗅探/诊断工具。

你知道如何使用 Fiddler 监控 WCF 流量吗?我正在使用 WCF 测试客户端,但在 Fiddler 中没有获取到任何信息。 - earthling
你是否正在尝试使用Fiddler来针对在本地主机上运行的服务进行调试?如果是这样,请查看文档以了解需要做哪些操作才能使其正常工作。 - larsw
该服务托管在测试服务器上。现在我想想,我不确定使用Fiddler是否可能,因为该服务正在使用TCP绑定。也许这是一个更好的留给新线程的问题。 - earthling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接