【问题标题】:Get Performance counter for Clustered MSMQ获取群集 MSMQ 的性能计数器
【发布时间】:2017-02-02 11:45:39
【问题描述】:

我一直在尝试读取集群 MSMQ 的性能计数器。我已经阅读了几篇文章以找到一种读取此值的方法,并且我看到了解决方案,该解决方案说要读取计数器值,需要创建一个名为“NetNameForPerfCounters”的 RegistryKey。这将在 HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\MSMQ\PARAMETER\NetNameForPerfCounters 下创建,并作为我指定集群的网络名称的值。但一切都是徒劳的,它什么也没读。

var category = new PerformanceCounterCategory("MSMQ Queue", "<Clustered IP>")
Console.WriteLine(category.GetInstanceNames().Count().ToString());

这总是返回计数为 0。

【问题讨论】:

    标签: c# msmq performancecounter


    【解决方案1】:

    您可能认为 IP 地址可以用作 machineName,但我不确定它是否有效。我发现使用实际机器名称(".""acomputername")可以,但使用 IP 地址会失败。

    我在 PowerShell 中也发现了同样的情况;使用 IP 失败:

    Get-Counter -Counter (Get-Counter -ListSet "MSMQ Queue"  -Computer 127.0.0.1 ).PathsWithInstances
    

    但是-computer "machinename" 的同一行成功并显示了我的队列。

    对于较大的网络,我认为这意味着您需要@"domainname\machinename"

    https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.diagnostics/get-counter

    【讨论】:

    • 是的,您的 powershell 脚本正在使用集群的“IP”和网络名称,但我想实现这个“使用 C# 的 PerformanceCounter”
    • 所以从 powershell 获取计数器有效(没有特殊权限?),但即使您使用集群的 Windows 名称而不是“”,它在 C# 代码中也不起作用?
    • C# 代码是命令行 exe 吗?如果它托管在 WCF 或 Asp.Net 中,那么它将在几乎没有权限的 IIS 帐户下运行,因此会失败
    • 是的,powershell 无需特殊权限即可工作,并且它也适用于“集群的网络名称”和 IP。但不适用于 C#。我使用了 PerformanceCounter 类。代码没有给出任何错误,但它无法找到任何 MSMQ 实例。
    • 这是一个控制台应用程序。
    猜你喜欢
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 2018-06-21
    • 2014-11-30
    • 1970-01-01
    相关资源
    最近更新 更多