由于OSGi捆绑包激活冲突,AEM Cloud Manager管道在部署到暂存环境期间卡住

本文介绍如何解决Adobe Experience Manager (AEM) Cloud Manager管道在“部署到暂存”阶段期间卡住,从而因OSGi捆绑包激活冲突导致实例不可用和缺少类错误的问题。

描述 description

环境

Adobe Experience Manager (AEM) as a Cloud Service (AEMaaCS)(所有版本)

症状

  • Cloud Manager管道执行长时间保持在“部署到暂存”阶段中(超过一小时),没有可见错误或进展。
  • 受影响的环境在部署后变得不可用。
  • 尝试访问受影响的实例会导致登录页面为空。
  • 日志显示/libs/granite/core/content/login.html的缺少类错误、HTTP 500​或​ 404 ​响应以及运行状况检查失败。
  • 重新启动AEM并不能解决此问题;重新启动后,错误仍然存在。
  • 该问题可能只影响实例的子集,指示计时或竞争条件。

原因

部署更新了基础共享库,触发了OSGi框架刷新。 自定义组件的激活方法在此刷新期间执行了阻止存储库(JCR)登录,导致锁定争用并使依赖捆绑包处于半启动状态。 这会导致管道停滞并影响实例。

解决方法 resolution

请按照以下步骤解决问题:

  1. 确定受影响的环境:

    • 查看Cloud Manager管道执行日志和AEM实例日志,了解缺少类的错误和捆绑包激活失败。

    • 确认哪些实例在部署后不可用。

  2. 恢复受影响的环境:

    • 使用可用的环境备份将受影响的实例恢复到已知的良好状态。

    • 验证所有实例是否都返回到运行状态,以及登录页面是否正确加载。

  3. 查看自定义OSGi捆绑包激活逻辑:

    • 检查自定义OSGi组件,特别是那些具有onActivate()方法,在激活期间执行存储库(JCR)登录或其他阻止操作的组件。

    • 重构激活逻辑以避免在OSGi捆绑包激活期间阻止调用或存储库登录,因为这些内容可能会在框架刷新期间导致死锁或停滞。

    • 查找直接在激活方法中执行存储库登录或长时间运行操作的代码模式。

  4. 在较低的环境中测试部署:

    • 在部署到生产环境之前,请在较低的环境中测试同一包以验证问题是否不再出现。
  5. 监控未来部署:

    • 如果发生类似的停顿,请收集日志和管道执行详细信息以供进一步分析。

验证:

  • 确认所有受影响的实例均可运行,并且在还原和代码更改后,登录页面会按预期加载。
recommendation-more-help
experience-cloud-kcs-help-kbarticles