【问题标题】:How to work with Performance counters and WCF service in IIS?如何在 IIS 中使用性能计数器和 WCF 服务?
【发布时间】:2012-03-20 01:35:45
【问题描述】:

嗨,

我在 IIS7 中有一个 WCF 服务,它通过 TCP(WAS) 与 winform 应用程序通信,现在我需要监控性能。

我已将此添加到 web.config 文件中:

  <system.serviceModel>
    <diagnostics performanceCounters="All" />

打开性能监视器后,我用我的 winform 运行了几个测试,以确保服务已激活。

然后我打开性能监视器(实时),右键单击并添加计数器。我展开 ServiceModelService 4.0.0.0 并选择 Calls 和 Calls Duration,我还选择了在所选对象的实例列表框中说明的我的服务(svc),然后单击添加按钮。

在 ServiceModelOperation 4.0.0.0 下选择 Calls 和 Calls Duration 时,没有可供选择的实例或操作? ServiceModelEndpoint 4.0.0.0 也是如此?

点击确定时,将添加两个计数器(ServiceModelService)。

然后我单击解冻显示并启动我的 winform 应用程序,该应用程序进行了几次调用,但是我在性能监视器中看不到任何内容。我曾尝试右键单击其中一个性能计数器并选择“缩放选定计数器”,但这没有任何作用?

目标只是查看 WCF 服务的执行情况(速度、持续时间、数量、连接数等),检查各个操作也很好。

请帮忙!

注意:这是我尝试关注的文章:http://dkochnev.blogspot.com/2011/06/wcf-framework-40-monitoring-service.html

【问题讨论】:

    标签: .net wcf performance iis performancecounter


    【解决方案1】:

    看起来这可能是性能计数器工作方式的错误(或设计功能)。经过一番戳,我在MSDN forums找到了这个:

    我也有同样的问题。看来微软截断了尾巴 命名计数器实例时操作名称的结尾。他们 用某种 2 位数的 base-10 魔法替换截断的部分 数字。我猜这是一个哈希,但谁知道它实际上是怎样的 生成。问题是这个数字不能保证是唯一的,并且 可能会导致计数器名称冲突。如果发生这样的碰撞, 它似乎导致所有端点和操作计数器消失(在 至少对我来说)。

    我有两个方法名为 UpdateMarkupChunk 和 UpdateMarkupCancel。如果 我注释掉一个或另一个,使另一个不存在,他们 两者都解析为计数器实例名称中的 UpdateMarkupC53。当我 评论他们两个,没有计数器实例出现 ServiceModelEndpoint 或 ServiceModelOperation。

    你能建议一个解决方法吗,微软?我有一个生产 我想监控的服务已经到位,并且正在更改 操作名称不是一个选项。

    微软回应:

    你是对的。这种行为是设计使然。有一个限制 性能计数器实例名称的长度。

    操作性能计数器位于 使用 ServiceModelOperation 4.0.0.0 查看时的性能对象 性能监视器 (Perfmon.exe)。每个操作都有一个单独的 实例。也就是说,如果给定合约有 10 个操作,则 10 个操作 计数器实例与该合同相关联。物体 实例使用以下模式命名:

    (ServiceName).(ContractName).(OperationName)@(第一个端点监听器 地址)

    当一个 Windows Communication Foundation (WCF) 计数器实例名称 超过最大长度,WCF 替换实例的一部分 带有哈希值的名称。

    所以似乎是因为这个最大名称限制,当只有两位数的哈希后缀时,哈希冲突的可能性很大,并且当一个计数器的两个实例具有相同的名称时,它会清除整个计数器这实际上是不可能的。

    这有点令人沮丧。因此,除非 Microsoft 解决了这个问题(长哈希值,或者性能计数器更好地处理冲突),或者提供合适的解决方法,否则我们将盲目工作。

    【讨论】:

    • 很高兴找到这条评论。这正是我在 PerfMon 的 ServiceModelOperation 4.0.0.0 下没有看到任何操作的原因。非常感谢,微软。多么愚蠢的设计。
    【解决方案2】:

    WCF 服务包括您可以使用Windows Performance Monitor (Perfmon.exe) 跟踪的性能计数器。您可以从 Windows Server 2003 的管理工具中启动它。

    可以从服务的 .config 文件的诊断部分启用性能计数器,如以下示例配置所示:

    <configuration>
      <system.serviceModel>
        <diagnostics performanceCounters="All" /> 
      </system.serviceModel>
    </configuration>
    

    您可能想查看这些文章,这些文章可以指导您如何使用 WCF 服务的性能计数器:

    【讨论】:

    • 你看我的帖子了吗?这就是我正在做的,但我没有得到任何读数?可能是因为我在 WCF 中使用 messageInspectors 吗?
    • @Banshee,你有没有机会用你的最终解决方案更新它,如果有的话?我同意这是一个可怕的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    相关资源
    最近更新 更多