【问题标题】:How do I query an indicator of performance capability in an Azure App Service?如何查询 Azure 应用服务中的性能指标?
【发布时间】:2019-08-08 23:50:13
【问题描述】:

我有一些运行缓慢的服务正在执行一些相当繁重的处理。这些进程在多个不同的地方运行,包括本地服务器和 Azure,并且都将它们的结果写入一个公共数据库。我想在数据库中存储一个与处理结果相关联的注释,说明对运行处理的性能能力有用的信息。

我的本​​地服务器成功运行以下代码,这允许我记录 CPU 名称(例如:我的工作站使用以下代码记录“AMD Ryzen 9 3900X 12 核处理器”,这足以满足我们的需求):

    public string GetCpu()
    {
        var searcher = new ManagementObjectSearcher("SELECT Name FROM Win32_Processor");

        string results = "Unknown CPU";
        foreach (var item in searcher.Get())
        {
            results = item["Name"].ToString();
        }

        return results;
    }

您可能怀疑,此代码无法在 Azure 中运行并出现权限错误。还有什么我可以在 Azure 中运行以获取有用信息的东西,即使不完全相同?我不需要 CPU 名称,只是处理能力的有用指标。如果记录了诸如“P1V1 App Hosting Plan”之类的内容,那将足以满足我们的需求。我不确定是否有比这更能说明处理能力的东西,但我也愿意接受其他建议。考虑到正在进行的多租户设置,我怀疑在 Azure 中获取 CPU 模型甚至可能具有欺骗性。

【问题讨论】:

    标签: c# azure .net-core azure-web-app-service .net-core-2.2


    【解决方案1】:

    有一个简单的方法来获取它,Azure 有一个名为WEBSITE_SKU 的环境存储主机计划级别。你可以去你的 Kudu 页面查看环境。

    您可以使用Environment.GetEnvironmentVariable("WEBSITE_SKU") 来获取它。


    以上示例将为所有级别的 Premium V2 配置输出“PremiumV2”。这意味着它对于 P1V2、P2V2 和 P3V2 具有相同的输出,即使每个的 ACU 是前一个的两倍。幸运的是,there are a number of other environment variables with useful information 在其中可以为我们提供更多信息。有了这些额外信息,以一种既可以在本地也可以在 Azure 应用服务中工作的方式收集信息的函数示例可能如下所示:

    public string GetComputationalResources()
    {
        string results = null;
    
        try
        {
            var azureSku = Environment.GetEnvironmentVariable("WEBSITE_SKU");
            if (!string.IsNullOrWhiteSpace(azureSku))
            {
                // We're in Azure. Get more information!
    
                var cpuCount = Environment.GetEnvironmentVariable("NUMBER_OF_PROCESSORS")?.Trim();
                var cpuId = Environment.GetEnvironmentVariable("PROCESSOR_IDENTIFIER")?.Trim();
                var computeMode = Environment.GetEnvironmentVariable("WEBSITE_COMPUTE_MODE")?.Trim();
                var websiteMode = Environment.GetEnvironmentVariable("WEBSITE_SITE_MODE")?.Trim();
                results = $"{azureSku} {computeMode} {websiteMode} | {cpuCount}x {cpuId}";
            }
    
        }
        catch
        {
            results = null;
        }
    
        if (results == null)
        {
            try
            {
                using (var searcher = new ManagementObjectSearcher("SELECT Name FROM Win32_Processor"))
                {
                    foreach (var item in searcher.Get())
                    {
                        results = item["Name"].ToString().Trim();
                    }
                }
            }
            catch
            {
                results = "Unknown CPU";
            }
        }
    
        return results;
    }
    

    示例输出(据我了解,可能在 Azure 中获得 AMD 而不仅仅是 Intel):

    • 本地:AMD Ryzen 9 3900X 12-Core Processor
    • P1V2:PremiumV2 Dedicated | 1x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
    • P2V2:PremiumV2 Dedicated | 2x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
    • P3V2:PremiumV2 Dedicated | 4x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
    • P1:Premium Dedicated | 1x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
    • P2:Premium Dedicated | 2x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
    • P3:Premium Dedicated | 4x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
    • S1:Standard Dedicated | 1x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
    • S2:Standard Dedicated | 2x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
    • S3:Standard Dedicated | 4x Intel64 Family 6 Model 79 Stepping 1, GenuineIntel

    【讨论】:

    • 感谢您的回答。这让我很接近,但并不完全在那里。如果我将我的应用服务计划从 P1v2 切换到 P2v2,它仍然只报告“PremiumV2”而没有大小指示。鉴于 P2v2 具有两倍的计算能力,我希望以某种方式表明这一点。将您的答案与来自其他链接的信息拼凑在一起,我能够得到我需要的东西。我将编辑您的答案以将我的代码放在那里,以防将来对其他人有所帮助。谢谢! gist.github.com/sayedihashimi/831d8883cdf1d23823f3
    猜你喜欢
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 2022-12-15
    • 1970-01-01
    • 2017-09-29
    相关资源
    最近更新 更多