解决AEM as a Cloud Service管道生成中的StackOverflowError问题

在AEM as a Cloud Service中,在管道构建期间发生循环StackOverflowError。 该错误被跟踪为在编译深度递归自定义HTL代码时JVM栈栈大小设置不足。 调整Maven配置中的JVM栈栈大小参数可成功完成管道。

描述 description

环境

  • 产品: Adobe Experience Manager as a Cloud Service(AEMaaCS) — 站点
  • 相关约束:在管道生成期间编译复杂的递归HTL代码

问题/症状

  • StackOverflowError​在管道构建步骤中重复出现,特别是Java编译阶段。
  • 即使之前成功提交源代码,也会发生管道故障。
  • 增加或减少JVM栈栈大小(-Xss)会影响生成结果。
  • 由于基础架构资源限制,成功的本地生成无法保证Cloud Manager管道取得成功。

解决方法 resolution

要解决此问题,请执行以下步骤:

  1. 识别项目中使用的所有pom.xml文件,包括根目录和子模块目录。
  2. 更新每个pom.xml文件中的Maven编译器插件配置,将JVM栈栈大小参数(-J-Xss)设置为6M或8M。
  3. 保存并提交对所有更新的pom.xml文件的更改。
  4. 进行这些更改后,重新运行受影响的Cloud Manager管道。
  5. 如果同时触发多个管道或一条管道卡住,请等待手动取消和资源清理,然后再开始新执行。
  6. 验证生成是否成功完成,但不包含​StackOverflowError

注释

  • 自定义HTL代码中的深层递归使用的栈栈内存比默认的JVM分配多。 增加-Xss会有所帮助,但如果递回增加,则可能会返回错误。
  • 为了保持长期稳定性,建议重构HTL模板以将递归降至最低。
  • -Xss增加到6-8 MB仍保留在AEM as a Cloud Service生成容器的标准内存约束中。
  • 避免在一个管道卡住时触发其他管道,以防止资源争用,并确保在重试生成之前进行正确的清理。
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f