You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Linux计划的Azure Functions中获取内存转储?

在Linux计划的Azure Functions中获取内存转储的方法

目前Linux计划的Azure Functions门户确实没有提供Windows计划那样直接的内存转储生成选项,但可以通过以下几种方式实现内存转储的收集:

  • 通过Kudu站点执行命令生成
    登录你的Linux函数应用对应的Kudu站点,进入SSH终端后,根据运行时选择对应工具:

    • 对于.NET Core/.NET 6+运行时:
      1. 安装dotnet-dump工具:dotnet tool install --global dotnet-dump
      2. 查询函数应用的进程ID:ps aux | grep dotnet
      3. 生成内存转储:dotnet-dump collect -p <进程ID>
        生成的转储文件会保存在当前目录,可通过Kudu的文件管理器下载到本地分析。
    • 对于Python、Node.js等原生运行时,可使用gcore工具:gcore <进程ID>,生成的核心转储文件同样可通过Kudu下载。
  • 利用Application Insights快照调试器
    为函数应用启用Application Insights后,在Application Insights门户的快照调试器页面配置快照收集规则(可针对异常触发或性能阈值触发)。当规则被触发时,系统会自动收集目标进程的内存快照并存储在Application Insights中,你可以直接在门户内查看和分析这些快照。

  • 自定义辅助函数触发转储
    编写一个带权限控制的辅助函数,在函数逻辑中执行系统命令来生成转储。以C#函数为例:

    using System.Diagnostics;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Extensions.Http;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Extensions.Logging;
    
    public static class DumpGeneratorFunction
    {
        [FunctionName("GenerateMemoryDump")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            // 获取dotnet进程ID(需根据实际运行时调整)
            var pidProcess = new Process();
            pidProcess.StartInfo.FileName = "bash";
            pidProcess.StartInfo.Arguments = "-c \"ps aux | grep dotnet | grep -v grep | awk '{print $2}'\"";
            pidProcess.StartInfo.UseShellExecute = false;
            pidProcess.StartInfo.RedirectStandardOutput = true;
            pidProcess.Start();
            var pid = await pidProcess.StandardOutput.ReadToEndAsync();
            pid = pid.Trim();
            await pidProcess.WaitForExitAsync();
    
            if (string.IsNullOrEmpty(pid))
            {
                return new BadRequestObjectResult("未找到目标进程");
            }
    
            // 生成内存转储
            var dumpProcess = new Process();
            dumpProcess.StartInfo.FileName = "dotnet";
            dumpProcess.StartInfo.Arguments = $"dump collect -p {pid} -o /home/site/wwwroot/dump_{pid}.dmp";
            dumpProcess.StartInfo.UseShellExecute = false;
            dumpProcess.StartInfo.RedirectStandardOutput = true;
            dumpProcess.Start();
            var output = await dumpProcess.StandardOutput.ReadToEndAsync();
            await dumpProcess.WaitForExitAsync();
    
            return new OkObjectResult($"转储生成完成:{output}");
        }
    }
    

    注意:需确保函数应用的运行身份具备执行相关命令的权限,且要做好访问控制避免未授权调用。

内容的提问来源于stack exchange,提问作者Krzysztof Madej

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:24:16