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

Azure DevOps自托管Agent离线及EC2无法SSH问题排查求助

EC2自托管Azure DevOps Agent间歇性卡住离线且无法SSH连接的排查问题

问题描述

在Azure DevOps中运行Pipeline时,部署在EC2实例上的自托管Agent偶尔会卡住并离线,之后无法通过SSH连接该EC2实例。需判断该问题是否由AWS服务中断导致,或是其他原因,同时确认是否与提供的Pipeline配置相关。

提供的Pipeline配置

# Dependabot
# Maven
# Build your Java project and run tests with Apache Maven.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/java

schedules:
  - cron: "0 12 * * 0"
    displayName: Weekly Dependency Updates
    branches:
      include:
      - main
    always: true
    
trigger: 
- master

pool:
  name: TestAgent
  demands:
   - Agent.Name -equals NewAgent
stages:
  - stage: CheckDependencies
    displayName: 'Check Dependencies'
    jobs:
      - job: Dependabot
        displayName: 'Run Dependabot'
        variables:
        - name: DIRECTORY_PATH
          value: /
        - name: PACKAGE_MANAGER
          value: bundler
        - name: PROJECT_PATH
          value: sugamarora23/_git/DriveEasy
          # Optional : User to assign to the created pull request
          # Name : Assignee
          # value : any
        steps:
          - task: dependabot@1
            displayName: 'Run Dependabot'
            inputs:
              failOnException: false
          - script: git clone https://github.com/dependabot/dependabot-script.git
            displayName: Clone Dependabot config repo
          
          - script: |
              cd dependabot-script
              docker build -t "dependabot/dependabot-script" -f Dockerfile . 
            displayName: Build Dependabot Image
          
          - script: |
              docker run --rm -e AZURE_ACCESS_TOKEN='$(PAT)' \
                              -e GITHUB_ACCESS_TOKEN='$(GHPAT)' \
                              -e PACKAGE_MANAGER='$(PACKAGE_MANAGER)' \
                              -e PROJECT_PATH='$(PROJECT_PATH)' \
                              -e DIRECTORY_PATH='$(DIRECTORY_PATH)' \
                              dependabot/dependabot-script
            displayName: Dependabot

已完成操作

  • 搭建基于EC2实例的Azure DevOps自托管Agent,配置Pipeline并设置每周依赖更新的定时任务
  • 指定TestAgent池及NewAgent运行Pipeline,执行Dependabot依赖更新

预期与实际结果

  • 预期:Pipeline按计划成功运行,完成依赖更新且无异常
  • 实际:Pipeline运行期间,EC2上的自托管Agent偶尔卡住离线,之后无法SSH连接EC2,问题间歇性发生,原因不明

排查方向与解决建议

一、排除AWS服务中断因素

  • 查看AWS对应区域的服务健康仪表盘,确认EC2、VPC等相关服务是否有历史中断记录,对比问题发生时间是否匹配
  • 检查EC2实例的事件历史(AWS控制台→EC2→实例→事件历史),查看是否有AWS触发的重启、维护等操作

二、排查Pipeline配置与Agent运行负载问题

  1. 资源耗尽导致实例无响应

    • 检查EC2实例的监控指标(CPU、内存、磁盘IO、网络带宽),确认问题发生时是否出现资源占满的情况:
      • Pipeline中的Docker镜像构建与运行操作会占用大量CPU和内存,若EC2实例规格过小,极易因资源耗尽导致系统无响应
      • 可在Agent运行时添加资源监控脚本,记录Pipeline执行期间的资源使用情况
    • 检查磁盘空间:Docker镜像和容器会持续占用磁盘空间,若实例磁盘已满,会直接导致系统崩溃或无法连接
  2. Docker相关操作的潜在冲突

    • Pipeline中同时执行了dependabot@1任务和手动克隆脚本、构建镜像运行容器的操作,存在重复执行Dependabot的情况,可能引发资源冲突
    • 手动构建Docker镜像后未清理旧镜像,会持续占用磁盘空间,最终导致实例异常
    • 给Docker容器添加资源限制(如--memory、--cpus参数),避免单个容器耗尽实例资源;同时收集容器运行日志,排查是否存在内存泄漏或进程僵死问题
  3. Agent本身的稳定性问题

    • 检查自托管Agent的日志(默认路径:_diag文件夹下的日志文件),查看离线前是否有错误、超时或资源不足的提示
    • 确认Agent版本是否为最新,旧版本可能存在已知的稳定性缺陷
    • 检查Agent运行用户的权限,确保其拥有执行Docker操作的足够权限,权限不足可能导致进程卡住

三、网络与SSH连接问题排查

  • 检查EC2实例的安全组、NACL配置,确认SSH端口(22)是否始终开放,是否存在临时的网络规则变更
  • 获取EC2实例的系统日志(AWS控制台→EC2→实例→获取系统日志),查看是否有SSH服务崩溃、系统内核报错等信息
  • 在Agent中添加定时心跳脚本,或配置AWS CloudWatch告警,当实例无响应时自动触发重启

四、临时缓解方案

  • 给EC2实例启用自动恢复(AWS控制台→EC2→实例→操作→实例设置→启用自动恢复),当实例检测到状态异常时自动重启
  • 调整Pipeline配置,去掉重复的Dependabot任务,仅保留一种执行方式(要么用dependabot@1任务,要么用手动Docker运行方式)
  • 升级EC2实例规格,增加CPU和内存资源,避免因资源不足导致的系统崩溃

内容的提问来源于stack exchange,提问作者Sugam Arora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:37:47