如何测量作为 Kubernetes pod 运行的 Azure Pipeline 构建代理的不可回收内存

问题描述 投票:0回答:1

我们有一个设置,其中 Azure DevOps Pipelines 自托管代理作为 Kubernetes Pod 运行,以便我们可以在单个 Azure VM 上运行多个构建代理。

现在我想测量某些管道作业期间的最大内存消耗。我的目标是弄清楚某个作业至少需要多少内存才能运行,而不会因 OOM 而被 K8s 杀死。

为此,我编写了一个脚本,该脚本在管道作业开始时启动,并每隔几秒测量一次当前内存,直到作业结束。最后,测量数据作为管道工件提供以供以后分析。

由于这是 Kubernetes,我无法使用 top、free 等。相反,我正在解析 Kubernetes pod 特定 cgroup 的 memory.stat 文件(cgroups v2)。

从该 memory.stat 文件中,我总结了以下值:

  • 活动文件
  • active_anon
  • slab_不可回收
  • 无可避免

我现在已经执行了几次测试运行,但尽管在同一个 Git 存储库提交上始终运行相同的管道,但我得到的最大值非常不同。

我计算最大不可回收内存的方式是否有问题,或者当 Azure DevOps 构建代理已经在内存测量之间运行了许多管道时,它甚至可能存在某种(临时)内存泄漏?

我很感激任何建议,因为我知道这个话题非常复杂。

kubernetes memory azure-pipelines azure-aks cgroups
1个回答
0
投票

根据捕获资源利用率详细信息

使用 Azure DevOps Services 时,通过启用详细日志,您可以在日志中查看资源利用率,包括磁盘使用情况、内存使用情况和 CPU 利用率。管道完成后,在日志中搜索每个步骤的

Agent environment resources
条目:

Pipeline logs with resource utilization diagnostics

要为单次运行配置详细日志,您可以通过选择运行管道并选择启用系统诊断来启动新构建:

Run new build

© www.soinside.com 2019 - 2024. All rights reserved.