【Function App】如果一个拥有多个Function App的Plan遇见了High CPU问题? 如何方便定位是哪一个Function App引发的呢?

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 在Azure Function App测试中,若多个Function App共用同一App Service Plan资源,当出现High CPU问题时,由于Function App公开指标无法直接观测CPU状态,可通过启用Application Insights解决。其Live Metrics功能可过滤并查看每个Function App的CPU使用情况。具体步骤为:将所有Function App连接至同一Application Insights资源,进入Live Metrics页面按Role筛选监控数据。附有三段C#代码示例,分别展示占用CPU、Memory及普通功能的实现方法。

问题描述

在本次测试的Function App中,创建了三个Function App使用同一个App Service Plan资源。

当资源出现High CPU的问题时候,如何来快速定位是哪一个资源占用了CPU资源呢?

因为Function App公开的指标中,并不能观察到CPU状态。

那么,还是其它办法吗?

 

问题解答

有的。

启用Application Insights。 在它的Live Metrics中,可以直接查看每一个Function App的资源状态!

 

详细步骤是

1) 把三个Function App都启动Application Insights并配置到同一个Application Insights资源中

2) 进入Application Insights页面,选择Live Metrics功能

3) 根据Role进行过滤,分别查看每一个App的CPU指标

 

参考资料

如何为 Azure Functions 配置监视 : https://docs.azure.cn/zh-cn/azure-functions/configure-monitoring?tabs=v2

 

 

 

 

 

附录:提供三段简单的C#代码

1:占用CPU


using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace mytest.Function
{
    public class CpuIntensiveFunction
    {
        private readonly ILogger<CpuIntensiveFunction> _logger;
        public CpuIntensiveFunction(ILogger<CpuIntensiveFunction> logger)
        {
            _logger = logger;
        }
        [Function("CpuIntensiveFunction")]
        public IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req)
        {
            _logger.LogInformation("C# HTTP trigger function processed a request.");
            int times = 100;
            if (req.Query.TryGetValue("times", out var timesQuery))
                int.TryParse(timesQuery, out times);
            long result = Fibonacci(times);
            _logger.LogInformation($"Calculated Fibonacci({times}): {result}");
            return new OkObjectResult("Welcome to Azure Functions!");
        }
        static long Fibonacci(int n)
        {
            if (n <= 1) return n;
            return Fibonacci(n - 1) + Fibonacci(n - 2);
        }
    }
}


 

2:占用Memory


using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace mytest.Function
{
    public class MemoryIntensiveFunction
    {
        private readonly ILogger<MemoryIntensiveFunction> _logger;
        public MemoryIntensiveFunction(ILogger<MemoryIntensiveFunction> logger)
        {
            _logger = logger;
        }
        [Function("MemoryIntensiveFunction")]
        public IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req)
        {
            _logger.LogInformation("C# HTTP trigger function processed a request.");
            int size = 100_000_000; // 分配一个大的数组
            byte[] largeArray = new byte[size];
            for (int i = 0; i < size; i++)
            {
                largeArray[i] = (byte)(i % 256);
            }
            _logger.LogInformation("Memory allocation completed.");
            return new OkObjectResult("Welcome to Azure Functions!");
        }
    }
}


 

3:普通代码


using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace mytest.Function
{
    public class SimpleFunction
    {
        private readonly ILogger<SimpleFunction> _logger;
        public SimpleFunction(ILogger<SimpleFunction> logger)
        {
            _logger = logger;
        }
        [Function("SimpleFunction")]
        public IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req)
        {
            _logger.LogInformation("C# HTTP trigger function processed a request.");
            return new OkObjectResult("Welcome to Azure Functions!");
        }
    }
}



 

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

相关文章
|
1月前
|
存储 安全 数据安全/隐私保护
【Azure Function App】在Function App中使用System Managed Identity访问Storage Account
本文介绍了如何在Azure Function中使用托管身份(Managed Identity)替代AzureWebJobsStorage连接函数应用到存储账户,以提高安全性并减少Access Key的使用。具体步骤包括:1) 启用系统分配的身份;2) 为函数应用授予存储访问权限,添加必要角色(如Storage Blob Data Contributor);3) 配置`AzureWebJobsStorage__blobServiceUri`参数指定Blob Service Uri。完成后删除旧配置,即可通过Managed Identity访问Storage Account。
99 20
|
9天前
【Function App】在PowerShell Function中指定特殊的Microsoft.Graph.Users版本
在Azure Function App中运行PowerShell Function时,通过Requirements.psd1文件管理模块版本。若需将“Microsoft.Graph.Users”从最新版2.26.0改回2.23.0以避免冲突,可通过以下步骤解决:1) 在requirements.psd1中明确指定版本为2.23.0 2) 在profile.ps1中添加`Import-Module Microsoft.Graph.Users -RequiredVersion 2.23.0`语句。此方法确保加载特定版本模块
45 18
|
4月前
|
存储 设计模式 监控
快速定位并优化CPU 与 JVM 内存性能瓶颈
本文介绍了 Java 应用常见的 CPU & JVM 内存热点原因及优化思路。
769 166
|
1月前
|
Linux
【Function App】记录一次 "OSError: Could not find a suitable TLS CA certificate bundle" 错误
错误信息:We get an error in function app. Exception: OSError: Could not find a suitable TLS CA certificate bundle, invalid path: /home/site/wwwroot/.python_packages/lib/site-packages/certifi/cacert.pem This issue happened by chance. This appears to be a platform issue with Function Apps running on Linux
|
2月前
|
容器
【Azure Container App】在消耗性的Container App Environmnet中无法查看当时正在使用多少CPU多少实例数的替代方案
在 Azure Container Apps 中使用 Consumption 消耗型环境时,无法通过门户查看当前核心 (CPU) 和实例使用情况。这是因为消耗型工作负载配置文件的设计所致。若需查看使用状态,可使用 az cli 命令 `az containerapp env list-usages` 获取详细信息,包括 Current Cores 数量。文档还提供了参考资料链接以帮助用户深入了解相关命令用法。
73 18
|
4月前
|
C#
【Azure Function】Function App出现System.IO.FileNotFoundException异常
Exception while executing function: xxxxxxx,The type initializer for 'xxxxxx.Storage.Adls2.StoreDataLakeGen2Reading' threw an exception. Could not load file or assembly 'Microsoft.Extensions.Configuration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the
150 64
|
2月前
|
存储 设计模式 监控
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?
|
4月前
|
Windows
【Azure App Service】对App Service中CPU指标数据中系统占用部分(System CPU)的解释
在Azure App Service中,CPU占比可在App Service Plan级别查看整个实例的资源使用情况。具体应用中仅能查看CPU时间,需通过公式【CPU Time / (CPU核数 * 60)】估算占比。CPU百分比适用于可横向扩展的计划(Basic、Standard、Premium),而CPU时间适用于Free或Shared计划。然而,CPU Percentage包含所有应用及系统占用的CPU,高CPU指标可能由系统而非应用请求引起。详细分析每个进程的CPU占用需抓取Windows Performance Trace数据。
133 40
|
3月前
|
JavaScript API
【Azure Function】Function App门户上的Test/Run返回错误:Failed to fetch
Running your function in portal requires the app to explicitly accept requests from https://portal.azure.cn. This is known as cross-origin resource sharing (CORS).Configure CORS to add https://portal.azure.cn to allowed origins.
118 7