如何分析常见的关键AEM问题
了解最常见的AEM关键问题以及如何分析它们。
描述 description
环境
Adobe Experience Manager (AEM)
问题/症状
本文介绍了最常见的关键AEM问题以及如何分析这些问题。
- AEM Sites性能
- AEM Assets性能
- 内存问题
- 索引问题
- 复制问题
- TarMK腐败问题
解决方法 resolution
AEM Sites性能问题
性能问题的症状
- 页面加载缓慢
- 页面创建或编辑缓慢
- AEM响应时间缓慢
- AEM未响应某些请求
- AEM上的request.log显示响应缓慢
导致性能问题的原因
- 线程争用:长时间运行的请求,例如搜索速度慢、后台作业编写繁重、移动站点内容的整个分支等。
- 高CPU利用率
- 成本高昂的请求,如成本高昂的搜索或效率低下的应用程序代码、组件等。
- 缺乏适当的维护
- 调度程序缓存不足
- 缺少CDN
- 缺少浏览器缓存
- 页面上载入并在页面顶部加载的脚本过多
- CSS在整个页面中加载,而不是在HTML标头中加载
- 服务器大小不足或体系结构不正确
- 内存问题(见下文)
如何分析性能问题
-
在OS级别检查AEM Java进程是否导致CPU利用率高:如果AEM导致CPU利用率高,请运行现成的性能分析工具几分钟,并分析结果。
- Linux:使用top命令检查CPU利用率。
- 窗口:使用Windows任务管理器
-
检查系统维护过程。 有关AEM维护的详细信息,请参阅此文章,并确保您对AEM进行了正确的维护,包括:
- 修订清理(仅限MongoMK和Database DocumentNodeStore) — 每日或更频繁
- 离线Tar压缩(仅限TarMK) — 每两周
- 数据存储垃圾收集(仅具有FileDataStore或S3 DataStore的系统) — 每周
- 工作流清除 — 每周
- 版本清除 — 每周
- AuditLog清除 — 每周
-
查看在AEM调度程序级别实施的缓存策略。
-
查看网站的缓存。
-
使用客户端网站分析工具,如Google Chrome浏览器 开发人员工具 面板中的 审核 功能。 这些工具将为您提供有关客户端性能改进的建议。
常见性能问题的解决方案
Assets性能问题
Assets性能问题的症状
- 将文件上传到/assets.html或/damadmin UI时速度较慢
- 缩略图生成时间过长
- Assets操作(如移动、删除、编辑和元数据更新)耗时过长
导致Assets性能问题的原因
- 缺乏适当的维护
- 未应用最新的修复包
- 未应用优化
- 服务器大小不适合用户负载
如何分析Assets性能问题
常见Assets性能问题的解决方案
- 查看AEM 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 MAT或IBM内存分析器工具中打开它。 在Eclipse MAT中,运行“泄漏嫌疑人”报告并打开“线程详细信息”视图,查看内存问题的可能原因。
常见内存问题的解决方案
- 如果您发现垃圾收集暂停时间较长,请优化应用程序代码以利用较少的内存。 通过优化应用程序而不是调整JVM,可以最好地解决大多数垃圾收集问题。
- 如果您已经优化过应用程序并且仍遇到长时间的GC暂停,则将重点放在调整JVM。
AEM索引问题
索引问题的症状
以下是AEM/Oak索引存在问题的迹象:
- 搜索结果已过期超过10分钟
- 缺少搜索结果
- 在通过站点UI、查询生成器搜索或JCR查询执行的搜索期间,UI或日志中返回错误
正在诊断索引问题
要查看异步索引是缓慢还是失败,请执行以下操作:
-
在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及更高版本
-
在每个页面上,选中以下字段:
FailingSince — 这表示索引首次开始失败的时间。
LastError — 这是显示导致索引失败的因素的栈栈跟踪。 如果此为空,则索引不会失败。
LastErrorTime — 这表示索引上次引发错误的时间。
LastIndexedTime — 如果此字段的日期和时间超过5分钟,则索引运行速度太慢。
导致索引问题的原因
- 维护不当或无法执行维护,如版本垃圾收集、工作流清除、审核清除、版本清除等。
- Tar存储中的区段损坏或丢失
- 群集环境(DocumentNodeStore - Mongo或数据库)中的修订损坏
- 群集环境中的群集拓扑问题
如何分析导致索引问题的原因
- 有关分析和修复索引问题,请参阅本文
复制问题
复制问题的症状
- 发布请求正在复制代理队列中排队
- 发布服务器上未显示已发布的内容
- 对系统性能的影响
导致复制问题的原因:
- 复制代理配置错误,无法连接到发布代理
- 复制时出现错误,导致复制队列卡住
- 系统速度较慢,处理复制的速度较慢
- 复制作为自定义工作流的一部分进行,并且问题在于工作流的处理。
如何分析复制问题:
-
检查复制队列状态:
正在处理项目时 活动:。
队列为空时 空闲:。
已阻止: 当项目在队列中,但无法处理时;例如,当代理指向已关闭或不存在的主机时。
-
如果服务器已克隆或代理最近已配置,请查看复制配置。 有关详细信息,请参阅此处。
-
查看位于 http://host:port/etc/replication/agents.author/AgentName.log.html#end 的复制代理日志。 如果您无法识别任何项目,请收集此日志并提交给AEM支持。
-
查看来自 AEMinstall/crx-quickstart/logs 的服务器error.log;如果您无法识别任何项目,请收集此日志并提交给AEM支持。
-
如果复制队列处于“空闲”状态并且上述任何内容都不适用,在这种情况下,问题很可能是由工作流引起的。 如果未处理工作流,则复制项目永远不会进入复制队列。 要监控工作流的状态,您可以检查工作流仪表板,以检查正在运行的工作流实例的数量。 您可以在此处阅读有关管理工作流的资讯。
-
当系统处于高负载或遇到其他性能问题时,复制速度会减慢。
常见复制问题的解决方案:
TarMK腐败问题
TarMK损坏的症状
- 离线压缩后实例无法操作。
- 实例在 正在启动 状态下卡住。
- 日志文件或压缩命令输出报告 SegmentNotFoundException。
导致损坏问题的原因
- 该区段通过手动干预移除(例如rm -rf )。
- 区段通过修订垃圾收藏集删除,或者由于代码中的一些错误无法找到该区段。
- 由于代码中的一些错误,无法找到该区段。
- 无法按时执行各种维护任务,从而导致存储库增长和磁盘空间不足。
- 通过终止Java进程来强制停止AEM。
正在诊断存储库损坏问题:
- 查看error.log文件并检查是否存在 SegmentNotFoundException 或 IllegalArgument Exception。
- 要确定修订垃圾收藏集是否删除了区段,请查看org.apache.jackrabbit.oak.plugins.segment.file.TarReader-GC(启用调试日志)记录器的输出。 该记录器会记录清理阶段删除的所有区段的区段ID。 仅当违规区段ID显示在该记录器的输出中是修订垃圾收集时,才会导致异常。
- 在外部数据存储中损坏的情况下,搜索日志文件以查找错误 的所有匹配项。获取blobId 的InputStream时出错。 此错误表示您的AEM数据存储目录中缺少文件。
修复损坏问题的解决方案: