如何分析常见的关键AEM问题

了解最常见的AEM关键问题以及如何分析它们。

描述 description

环境

Adobe Experience Manager (AEM)

问题/症状

本文介绍了最常见的关键AEM问题以及如何分析这些问题。

  • AEM Sites性能
  • AEM Assets性能
  • 内存问题
  • 索引问题
  • 复制问题
  • TarMK腐败问题

解决方法 resolution

AEM Sites性能问题

性能问题的症状

  1. 页面加载缓慢
  2. 页面创建或编辑缓慢
  3. AEM响应时间缓慢
  4. AEM未响应某些请求
  5. AEM上的request.log显示响应缓慢

导致性能问题的原因

  1. 线程争用:长时间运行的请求,例如搜索速度慢、后台作业编写繁重、移动站点内容的整个分支等。
  2. 高CPU利用率
  3. 成本高昂的请求,如成本高昂的搜索或效率低下的应用程序代码、组件等。
  4. 缺乏适当的维护
  5. 调度程序缓存不足
  6. 缺少CDN
  7. 缺少浏览器缓存
  8. 页面上载入并在页面顶部加载的脚本过多
  9. CSS在整个页面中加载,而不是在HTML标头中加载
  10. 服务器大小不足或体系结构不正确
  11. 内存问题(见下文)

如何分析性能问题

  1. 捕获一系列线程转储分析它们

  2. 在OS级别检查AEM Java进程是否导致CPU利用率高:如果AEM导致CPU利用率高,请运行现成的性能分析工具几分钟,并分析结果。

    • Linux:使用top命令检查CPU利用率。
    • 窗口:使用Windows任务管理器
  3. 分析任何慢速请求的request.log文件

  4. 检查系统维护过程。 有关AEM维护的详细信息,请参阅此文章,并确保您对AEM进行了正确的维护,包括:

    • 修订清理(仅限MongoMK和Database DocumentNodeStore) — 每日或更频繁
    • 离线Tar压缩(仅限TarMK) — 每两周
    • 数据存储垃圾收集(仅具有FileDataStore或S3 DataStore的系统) — 每周
    • 工作流清除 — 每周
    • 版本清除 — 每周
    • AuditLog清除 — 每周
  5. 查看在AEM调度程序级别实施的缓存策略。

  6. 查看网站的缓存

  7. 使用客户端网站分析工具,如Google Chrome浏览器 开发人员工具 面板中的 审核 功能。 这些工具将为您提供有关客户端性能改进的建议。

常见性能问题的解决方案

Assets性能问题

Assets性能问题的症状

  • 将文件上传到/assets.html或/damadmin UI时速度较慢
  • 缩略图生成时间过长
  • Assets操作(如移动、删除、编辑和元数据更新)耗时过长

导致Assets性能问题的原因

  • 缺乏适当的维护
  • 未应用最新的修复包
  • 未应用优化
  • 服务器大小不适合用户负载

如何分析Assets性能问题

常见Assets性能问题的解决方案

内存问题

内存问题的症状

  • AEM随机崩溃,在日志中观察到OutOfMemoryError
  • AEM会随着时间的推移而减慢,并最终崩溃
  • AEM无响应

正在诊断内存问题

  • 在日志文件中搜索OutOfMemoryError,如果找到任何匹配项,则说明存在内存问题

  • 查看http://aem-host:port/system/console/memoryusage屏幕

    如果“旧生成”(JDK 7及更低版本)或“持久生成”(JDK8或更高版本)的用法较高,则可能是栈内存使用率问题的征兆。 单击“运行垃圾收集器”以请求JVM运行完整栈垃圾收集。 如果在请求GC后高栈利用率保持较高,则可能存在问题。 在具有Oak Tar存储的AEM实例上,如果长期使用率高于3GB,则可能存在问题。 内存缓存配置可能导致具有Mongo存储的系统上的栈利用率较高。

  • 进行线程转储和顶级输出并执行线程分析。 检查导致CPU使用率较高的线程是否是本机JVM垃圾回收线程。 如果使用最多CPU时间的线程是“VM线程”或任何垃圾收集线程,则可能存在内存问题。

导致内存问题的原因

  • Java应用程序内存泄漏
  • 由于在自定义代码中终结的用法不正确,Java终结器会栈积如山
  • 最大栈配置不足

如何分析内存问题的原因

有关如何捕获栈转储的详细信息,请参阅本文

识别内存问题原因的最佳方法是分析栈转储。

捕获到栈转储文件后,请在Eclipse MATIBM内存分析器工具中打开它。 在Eclipse MAT中,运行“泄漏嫌疑人”报告并打开“线程详细信息”视图,查看内存问题的可能原因。

常见内存问题的解决方案

  • 如果您发现垃圾收集暂停时间较长,请优化应用程序代码以利用较少的内存。 通过优化应用程序而不是调整JVM,可以最好地解决大多数垃圾收集问题。
  • 如果您已经优化过应用程序并且仍遇到长时间的GC暂停,则将重点放在调整JVM

AEM索引问题

索引问题的症状

以下是AEM/Oak索引存在问题的迹象:

  • 搜索结果已过期超过10分钟
  • 缺少搜索结果
  • 在通过站点UI、查询生成器搜索或JCR查询执行的搜索期间,UI或日志中返回错误

正在诊断索引问题

要查看异步索引是缓慢还是失败,请执行以下操作:

  1. 在AEM实例上打开这些URL以查看有关异步索引器的统计信息: http://aemhost:port/system/console/jmx/org.apache.jackrabbit.oak%3Aname%3Dasync%2Ctype%3DIndexStats http://aemhost:port/system/console/jmx/org.apache.jackrabbit.oak%3Aname%3Dfulltext-async%2Ctype%3DIndexStats — 此URL仅适用于AEM6.2及更高版本

  2. 在每个页面上,选中以下字段:

    FailingSince — 这表示索引首次开始失败的时间。

    LastError — 这是显示导致索引失败的因素的栈栈跟踪。 如果此为空,则索引不会失败。

    LastErrorTime — 这表示索引上次引发错误的时间。

    LastIndexedTime — 如果此字段的日期和时间超过5分钟,则索引运行速度太慢。

导致索引问题的原因

  • 维护不当或无法执行维护,如版本垃圾收集、工作流清除、审核清除、版本清除等。
  • Tar存储中的区段损坏或丢失
  • 群集环境(DocumentNodeStore - Mongo或数据库)中的修订损坏
  • 群集环境中的群集拓扑问题

如何分析导致索引问题的原因

  • 有关分析和修复索引问题,请参阅本文

复制问题

复制问题的症状

  • 发布请求正在复制代理队列中排队
  • 发布服务器上未显示已发布的内容
  • 对系统性能的影响

导致复制问题的原因:

  • 复制代理配置错误,无法连接到发布代理
  • 复制时出现错误,导致复制队列卡住
  • 系统速度较慢,处理复制的速度较慢
  • 复制作为自定义工作流的一部分进行,并且问题在于工作流的处理。

如何分析复制问题:

  1. 检查复制队列状态

    正在处理项目时 活动:

    队列为空时 空闲:

    已阻止: 当项目在队列中,但无法处理时;例如,当代理指向已关闭或不存在的主机时。

  2. 如果服务器已克隆或代理最近已配置,请查看复制配置。 有关详细信息,请参阅此处

  3. 查看位于 http://host:port/etc/replication/agents.author/AgentName.log.html#end 的复制代理日志。 如果您无法识别任何项目,请收集此日志并提交给AEM支持。

  4. 查看来自 AEMinstall/crx-quickstart/logs 的服务器error.log;如果您无法识别任何项目,请收集此日志并提交给AEM支持。

  5. 如果复制队列处于“空闲”状态并且上述任何内容都不适用,在这种情况下,问题很可能是由工作流引起的。 如果未处理工作流,则复制项目永远不会进入复制队列。 要监控工作流的状态,您可以检查工作流仪表板,以检查正在运行的工作流实例的数量。 您可以在此处阅读有关管理工作流的资讯。

  6. 当系统处于高负载或遇到其他性能问题时,复制速度会减慢。

常见复制问题的解决方案:

  1. 查看复制队列问题
  2. 如果问题是由工作流未有效运行造成的,则可以查看并发工作流处理提示

TarMK腐败问题

TarMK损坏的症状

  • 离线压缩后实例无法操作。
  • 实例在 正在启动 状态下卡住。
  • 日志文件或压缩命令输出报告 SegmentNotFoundException

导致损坏问题的原因

  • 该区段通过手动干预移除(例如rm -rf )。
  • 区段通过修订垃圾收藏集删除,或者由于代码中的一些错误无法找到该区段。
  • 由于代码中的一些错误,无法找到该区段。
  • 无法按时执行各种维护任务,从而导致存储库增长和磁盘空间不足。
  • 通过终止Java进程来强制停止AEM。

正在诊断存储库损坏问题:

  • 查看error.log文件并检查是否存在 SegmentNotFoundExceptionIllegalArgument Exception
  • 要确定修订垃圾收藏集是否删除了区段,请查看org.apache.jackrabbit.oak.plugins.segment.file.TarReader-GC(启用调试日志)记录器的输出。 该记录器会记录清理阶段删除的所有区段的区段ID。 仅当违规区段ID显示在该记录器的输出中是修订垃圾收集时,才会导致异常。
  • 在外部数据存储中损坏的情况下,搜索日志文件以查找错误 的所有匹配项。获取blobId 的InputStream时出错。 此错误表示您的AEM数据存储目录中缺少文件。

修复损坏问题的解决方案:

  • 使用oak-run的check运行模式确定区段存储的最后一个已知良好修订。 手动将损坏的区段存储恢复到其最新的良好修订。 此操作会将Oak存储库及时恢复到以前的状态。 在执行此操作之前,您应该完全备份存储库。

    • 要执行检查和还原,请按照本文中所述的步骤操作。
    • 如果检查因 ConsistencyChecker而失败 — 未找到良好的修订,则实施此文章的B部分中的步骤。
  • 如果您未使用数据存储,则请使用外部文件S3或Azure数据存储,而不是默认的segmentstore。

    • 使用数据存储可提供更好的性能。
    • 使用crx2oak将实例迁移到具有数据存储的实例。
  • 应用最新的Service Pack和累积修订包以及Oak累积修订包。

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f