簡體   English   中英

創建的性能計數器不可見

[英]Created performance counters not visible

我必須以programmaticaly方式創建性能計數器。 似乎代碼正在運行,但我沒有在perfmon中看到性能計數器類別。 當我的意思是代碼工作時,我說它不會拋出任何異常。 我以管理員身份運行它。

我已經看到SO上的答案說可能需要一些時間來出現計數器。 但我在回家之前安裝了它們,第二天它們仍然不可見。

這是一個小的控制台應用程序來測試它。 我安裝了計數器,然后使用它們但在性能監視器中看不到它們。

編輯:我在3台機器上進行了測試,並按預期在其中一台機器上運行(perfmon中的perf計數器可見)。 是否有可能在Windows中的其他地方看到性能計數器(Powershell,一些sysinternals工具?)


using System;
using System.Diagnostics;

namespace PerfCounters { class Program { static void Main() { var program = new Program(); program.Run(); }

    private const string CATEGORY_NAME = "AAAMySpecialCategory";
    private const string CATEGORY_HELP = "AAAMySpecialCategory Help";
    private const string OPS_IN_CURRENT_COUNTER_NAME = "# current calls";

    public void Run()
    {
        while (true)
        {
            PrintUsage();
            Console.Write(":> ");
            var keyInfo = Console.ReadLine();
            if (keyInfo == "q")
            {
                break;
            }

            switch (keyInfo)
            {
                case "i":
                    InstallPerfCountersCategory();
                    break;

                case "c":
                    Console.WriteLine(PerformanceCounterCategoryExists()
                            ? "Perf counter category ({0}) does exist"
                            : "Perf counter categry ({0}) does not exist", CATEGORY_NAME);
                    break;

                case "w":
                    IncrementPerfCounter();
                    break;

                case "u":
                    UninstallPerfCountersCategory();
                    break;
            }
        } 
    }

    private static void PrintUsage()
    {
        Console.WriteLine();
        Console.WriteLine("Usage:");
        Console.WriteLine("i - install performance counters category ({0})", CATEGORY_NAME);
        Console.WriteLine("c - check if category exists ({0})", CATEGORY_NAME);
        Console.WriteLine("w - work with perf counter (increment)");
        Console.WriteLine("u - uninstall performance counters category ({0})", CATEGORY_NAME);
        Console.WriteLine("q - quit");
    }
    private void IncrementPerfCounter()
    {
        if (!PerformanceCounterCategoryExists())
        {
            Console.WriteLine("Perf counter category ({0}) does not exist - install first", CATEGORY_NAME);
            return;
        }

        var currentOps = new PerformanceCounter(CATEGORY_NAME, OPS_IN_CURRENT_COUNTER_NAME, false);
        Console.Write("Incrementing perf counter");
        currentOps.Increment();
        Console.WriteLine(" - incremented");
    }
    private void InstallPerfCountersCategory()
    {
        if (PerformanceCounterCategoryExists())
        {
            Console.WriteLine("Uninstall first");
            return;
        }

        var ccdc = new CounterCreationDataCollection
        {
            new CounterCreationData(OPS_IN_CURRENT_COUNTER_NAME, "", PerformanceCounterType.NumberOfItems32),
        };

        PerformanceCounterCategory.Create(CATEGORY_NAME, CATEGORY_HELP, PerformanceCounterCategoryType.SingleInstance, ccdc);
        Console.WriteLine("Installed");
    }
    private void UninstallPerfCountersCategory()
    {
        if (PerformanceCounterCategoryExists())
        {
            Console.WriteLine("Deleting perf counter category ({0})", CATEGORY_NAME);
            PerformanceCounterCategory.Delete(CATEGORY_NAME);
        }
        else
        {
            Console.WriteLine("Perf counter category ({0}) does not exist - install first", CATEGORY_NAME);
        }
    }
    private bool PerformanceCounterCategoryExists()
    {
        return PerformanceCounterCategory.Exists(CATEGORY_NAME);
    }
}

}

我有同樣的問題 - .NET代碼報告說計數器在那里,但在perfmon中沒有可見的這樣的計數器類別。

顯然,perfmon有時會通過在注冊表中將其標記為已禁用來禁用性能計數器

如果您在HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services簽入注冊表 ,您應該能夠找到您的性能計數器類別(只需查找您的類別名稱作為“文件夾”之一)。 在子項(“文件夾”)下, Performance找到注冊表值Disable Performance Counters並將其設置為零。 重新啟動perfmon,您現在應該在perfmon中看到您的類別和計數器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM