Ban*_*hee 7 .net iis performance wcf performancecounter
嗨,
我在IIS7中有一个WCF服务,通过TCP(WAS)与winform应用程序通信,现在我需要监视性能.
我已将此添加到web.config文件中:
<system.serviceModel>
<diagnostics performanceCounters="All" />
Run Code Online (Sandbox Code Playgroud)
打开性能监视器后,我使用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
看起来这可能是性能计数器如何工作的错误(或设计功能).经过一番探讨,我在MSDN论坛上发现了这个:
我也有同样的问题.在命名计数器实例时,Microsoft似乎会截断操作名称的尾部.他们用某种2位数的基数10幻数替换截断的部分.我猜这是一个哈希,但是谁知道它是如何生成的.问题是,这个数字不能保证唯一,并且可能导致计数器名称发生冲突.如果发生这种碰撞,它似乎会导致所有端点和操作计数器消失(至少对我而言).
我有两个名为UpdateMarkupChunk和UpdateMarkupCancel的方法.如果我将一个或另一个注释掉以使另一个不存在,则它们都会在计数器实例名称中解析为UpdateMarkupC53.当我同时对它们进行评论时,ServiceModelEndpoint或ServiceModelOperation都没有显示任何计数器实例.
你可以为微软推荐一个解决方法吗?我有一个我想要监控的生产服务,并且不能更改操作名称.
微软回应:
你是对的.这种行为是设计的.性能计数器实例名称的长度有限制.
使用性能监视器(Perfmon.exe)查看时,可以在ServiceModelOperation 4.0.0.0性能对象下找到操作性能计数器.每个操作都有一个单独的实例.也就是说,如果给定的合同有10个操作,则10个操作计数器实例与该合同相关联.使用以下模式命名对象实例:
(ServiceName).(ContractName).(OperationName)@(第一个端点侦听器地址)
当Windows Communication Foundation(WCF)计数器实例名称超过最大长度时,WCF将使用哈希值替换实例名称的一部分.
所以看起来由于这个最大名称限制,当只有一个两位数的哈希后缀时,哈希冲突的可能性很大,并且当一个计数器的两个实例具有相同的名称时,它会清除整个计数器,它实际上并不是可能.
这有点令人沮丧.因此,除非Microsoft修复此问题(长哈希值,或者通过perf计数器进行更好的冲突处理),或者提供合适的解决方法,否则我们将失明.
小智 0
WCF 服务包括可以使用Windows 性能监视器 (Perfmon.exe) 进行跟踪的性能计数器。您可以从 Windows Server 2003 中的管理工具启动它。
可以从服务的 .config 文件的诊断部分启用性能计数器,如以下示例配置所示:
<configuration>
<system.serviceModel>
<diagnostics performanceCounters="All" />
</system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)
您可能需要查看以下文章,它们可以指导您如何使用 WCF 服务的性能计数器: