您好,
我在IIS7中有一个WCF服务,它通过TCP(WAS)与winform应用程序通信,现在我需要监视性能。
我已将此添加到web.config文件中:
<system.serviceModel>
<diagnostics performanceCounters="All" />
打开性能监视器后,我使用winform运行几个测试,以确保服务已激活。
然后我打开性能监视器(实时),右键单击并添加计数器。我展开了ServiceModelService 4.0.0.0并选择了Calls和Calls Duration,我还选择了我所选择的对象列表框实例中所述的服务(svc),然后单击Add按钮。
在ServiceModelOperation 4.0.0.0下选择“呼叫和呼叫持续时间”时,是否没有要选择的实例或操作? ServiceModelEndpoint 4.0.0.0也是如此?
单击“确定”时,将添加两个计数器(ServiceModelService)。
然后我点击取消冻结显示并启动我的winform应用程序进行几次调用,但是我在性能监视器中看不到任何内容。我试图右键单击其中一个性能计数器并选择“Scale Selected Counter”但这没有任何作用?
目标只是看看WCF服务的执行情况(速度,持续时间,数量,连接等),检查个别操作也很棒。
请帮忙!
注意:这是我试图遵循的文章:http://dkochnev.blogspot.com/2011/06/wcf-framework-40-monitoring-service.html
答案 0 :(得分:6)
看起来这可能是性能计数器如何工作的错误(或设计功能)。经过一番戳之后,我在MSDN forums上找到了这个:
我有同样的问题。似乎微软截断了尾巴 命名计数器实例时操作名称的结尾。他们 用某种2位数的10-magic魔法替换截断的部分 数。我猜这是一个哈希,但谁知道它是如何实际的 产生。问题是,这个数字不能保证是唯一的 可能导致计数器名称冲突。如果发生这种碰撞, 它似乎导致所有端点和操作计数器消失(at 至少对我来说。)
我有两个名为UpdateMarkupChunk和UpdateMarkupCancel的方法。如果 我注释掉了一个或另一个,以便另一个不存在,他们 两者都在计数器实例名称中解析为UpdateMarkupC53。当我 将它们都注释掉,没有一个计数器实例出现 ServiceModelEndpoint或ServiceModelOperation。
你能为微软推荐一个解决方法吗?我有一个制作 已经到位的服务我想监控和改变 操作名称不是一个选项。
微软回应:
你是对的。这种行为是设计的。有一个限制 性能计数器实例名称的长度。
操作性能计数器位于 使用时查看ServiceModelOperation 4.0.0.0性能对象 性能监视器(Perfmon.exe)。每个操作都有一个人 实例。也就是说,如果给定的合同有10个操作,那么10个操作 计数器实例与该合同相关联。物体 实例使用以下模式命名:
(ServiceName)。(ContractName)。(OperationName)@(第一个端点监听器 地址)
当Windows Communication Foundation(WCF)计数器实例名称时 超过最大长度,WCF替换实例的一部分 带有哈希值的名称。
所以看起来由于这个最大名称限制,当只有两位数的哈希后缀时,哈希冲突的可能性很大,并且当一个计数器的两个实例具有相同的名称时,它会清除整个计数器它实际上是不可能的。
这有点令人沮丧。因此,除非Microsoft修复此问题(长哈希值,或者通过perf计数器进行更好的冲突处理),或者提供合适的解决方法,否则我们会盲目工作。
答案 1 :(得分:1)
WCF服务包括可以使用Windows Performance监视器(Perfmon.exe)跟踪的性能计数器。您可以从Windows Server 2003中的“管理工具”启动它。
可以从服务的.config文件的诊断部分启用性能计数器,如以下示例配置所示:
<configuration>
<system.serviceModel>
<diagnostics performanceCounters="All" />
</system.serviceModel>
</configuration>
您可能需要查看这些文章,这些文章可以指导您如何使用WCF服务的性能计数器: