AEM 6.x | 性能调整提示
了解优化Adobe Experience Manager (AEM)性能、负载测试、JVM参数和缓存调整的有效策略和提示。
描述 description
环境
- Adobe Experience Manager 6.4
- Adobe Experience Manager 6.5
问题/症状
当作者编辑内容时,响应时间较短,或者网站对访客请求的响应较慢。
这些性能调整提示可以帮助加快查询和性能。
原因
以下因素影响AEM中的性能问题:
- 设计不正确
- 应用程序代码
- 缺少缓存
- 磁盘I/O配置错误
- 内存大小
- 网络带宽和延迟
- 在某些特定的windows 2008和2012版本上安装了AEM,其中内存管理是一个问题
- 如下所述修改现成配置有助于提高AEM中的性能。
解决方法 resolution
防止性能问题
以下是您可以采取的一些步骤,以确保在性能问题影响用户之前发现并修复这些问题:
-
实施并执行模拟创作实例和发布实例中真实场景的负载测试。 研究和定义预期载荷是这一过程中的关键步骤。 此步骤可帮助您演示AEM应用程序、架构和AEM安装在生产环境中上线后是否能够正常运行。
本练习的结果有助于确定是否存在配置错误、应用程序问题、大小调整、硬件问题或其他影响系统性能的问题。 另请参阅性能准则和监视准则。 -
除了负载测试之外,压力测试有助于定义系统可处理的最大负载。 此测试可帮助您为流量尖峰做好准备。 可在此处找到有关性能测试的更多信息。
-
安装推荐的AEM Service Pack、累积修补程序包和修补程序: Adobe Experience Manager版本更新。
-
如果您使用的是Windows服务器,请查阅本文。
-
如果您计划将大量资源(图像、视频等)加载到AEM中,请确保应用Assets最佳实践。
-
配置足够的RAM并避免IO饱和
如果您打算以任何规模运行生产,则应为Linux环境预配RAM,因为区段tar文件在离线压缩(或在线压缩峰值)之间将增长到多少。 此外,以下选项可避免IO饱和。- 单独的操作系统、数据和日志记录磁盘
- 使用Noatime装载数据磁盘。
- 在数据磁盘上将预读缓冲区设置为32。
- 理想情况下,在数据磁盘上使用XFS over ext4。
- 如果RedHat在VM中运行,请确保熵池始终为
>
1K位(如果需要,请使用rngtools)
-
在Linux上禁用透明超大页面
AEM执行细粒度读取/写入,而Linux Transparent Great Pages针对大型操作进行了优化,因此建议在使用Mongo或Tar存储时禁用Transparent Great Pages。 -
启用临时工作流
临时工作流可用于满足以下条件的任何工作流:- 经常运行。
- 不需要工作流历史记录。
它们将在这些情况下带来性能提升。
通常在摄取大量资产时满足此使用案例。
请按照性能调整Assets中记录的过程操作。 -
调整Sling作业队列
批量上传大型资产通常是一个非常占用资源的过程。 默认情况下,每个作业队列的并发线程数等于CPU核心数。 因此,此值设置可能会导致整体性能受到影响和Java栈使用量过高。
Adobe建议不要超过CPU核心的50%。 要调整此值,请转到以下位置: https:/host:port/system/console/configMgr/org.apache.sling.event.jobs.QueueConfiguration
将queue.maxparallel
设置为表示承载AEM实例的服务器的CPU内核的50%的值。 例如,对于8个CPU内核,将该值设置为4。 -
优化Oak存储库
首先确保为AEM 6实例安装了最新的Oak版本。 请查看上面提到的推荐修补程序页面。Oak查询引擎/索引优化
-
为所有常用的搜索查询创建自定义Oak索引。
-
JVM参数
将这些JVM参数添加到AEM启动脚本中,以防止扩展查询使系统过载。 请注意,这些是从AEM 6.3开始的默认值。- Doak.queryLimitInMemory=500000(另请参阅Oak文档)
- Doak.queryLimitReads=100000(另请参阅Oak文档)
- Dupdate.limit=250000(仅适用于DocumentNodeStore,例如 MongoMK, RDBMK)
以下选项可能还会提高性能,但会更改结果大小调用的含义。 特别是,在计算大小时,只考虑所用索引中的查询限制。
此外,ACL不会应用于结果,因此对当前会话不可见的节点仍将包含在返回的计数中。 因此,返回的计数可以高于实际结果数,并且准确计数只能通过迭代结果来确定:- Doak.fastQuerySize=true (另请参阅Oak文档中的结果大小)
警告:启用 fastQuerySize 会加快查询响应。 但是,AEM为某些查询返回的结果计数不准确。 如果您依赖应用程序中的精确结果计数,请不要使用 fastQuerySize。
-
Lucene索引配置
打开/system/console/configMgr/org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexProviderService并- 启用 CopyOnRead(自AEM 6.2起默认启用)
- 启用 CopyOnWrite(自AEM 6.2起默认启用)
- 启用 预取索引文件(自AEM 6.2起默认启用)
有关可用参数的详细信息,请参阅https://jackrabbit.apache.org/oak/docs/query/lucene.html
由于某些路径不需要索引,因此可以执行以下操作:
在CRXDE Lite中,转到/oak:index/lucene,设置名为excludedPaths的多值字符串属性(字符串),其值为/var、/etc/workflow/instances、/etc/replication。 -
数据存储
如果您使用AEM Assets或拥有一个大量使用二进制文件的AEM应用程序,Adobe建议您使用外部数据存储。 使用外部数据存储有助于确保最大性能。 有关详细说明,请参阅文档。
使用FileDataStore时,将cacheSizeInMB调整为可用栈的百分比。 保守值为最大栈的2%。 例如,对于8 GB栈:- maxCachedBinarySize=1048576
- cacheSizeInMB=164
请注意,maxCachedBinarySize 设置为1 MB (1048576)。 因此,它仅缓存最大1 MB的文件。 将此设置调整到较小的值也可能有意义。
在处理大量二进制文件时,您希望最大化性能。 因此,Adobe建议使用外部数据存储,而不是默认节点存储。 此外,Adobe还建议您调整以下参数:- maxCachedBinarySize=10485760
- cacheSizeInMB=4096
注意: cacheSizeInMB 设置设置过高可能会导致Java进程内存不足。 例如,如果将最大栈大小设置为8 GB (-Xmx8g),并且您希望AEM和您的应用程序利用4 GB的组合栈,则将cacheSizeInMB设置为82(而不是164)是有意义的。 在2-10%的最大栈范围内是安全的配置。 但是,Adobe建议使用负载测试来验证设置更改,同时监控内存利用率。
-
-
Mongo存储调整
-
MongoBlobStore缓存大小: Blobstore用于存储和读取大型二进制对象。 在内部,实现具有高速缓存的存储器,它将二进制文件分割成相对较小的块(数据或散列代码或间接散列),以便每个块适合内存。 在默认设置中,MongoBlobStore使用16MB的固定缓存大小。 对于有更多RAM可用且经常访问Blob存储的部署(例如,当Lucene索引较大时),请增加缓存大小。 此缓存大小仅适用于使用MongoBlobStore(默认)的情况,而不适用于使用外部Blobstore的情况。
- 您可以通过DocumentNodeStoreService上的blobCacheSize设置来配置缓存大小(以MB为单位)。
例如:blobCacheSize=1024 - 另请查看AEM-MongoDB 清单。
- 您可以通过DocumentNodeStoreService上的blobCacheSize设置来配置缓存大小(以MB为单位)。
-
文档缓存大小: 要优化从MongoDB读取节点的性能,您需要调整DocumentNodeStore的缓存大小。 缓存的默认大小设置为256 MB,该大小分布在DocumentNodeStore中使用的各种缓存中。 请参阅http://jackrabbit.apache.org/oak/docs/nodestore/documentmk.html#cache
-
您可以通过DocumentNodeStoreService上的缓存设置来配置缓存大小(MB)。 例如,cache=2048。
-
在crx-quickstart/install/org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreService.configure中设置以下所有缓存配置,然后使用各种值执行负载测试,以查看您的环境的最佳配置是什么。 请注意,剩余缓存百分比将提供给文档缓存:
- cache=2048
- nodeCachePercentage=35
- childrenCachePercentage=20
- diffCachePercentage=30
- docChildrenCachePercentage=10
-
在以上配置中,百分比总计为95%。 剩余5%的缓存将分配给documentCache。 documentCache =缓存 — nodeCache — 子缓存 — diffCache - docChildrenCache
-
分发缓存百分比时,请确保documentCache的剩余缓存不是太大。 也就是说,将其保持为最大500 MB或更小;大型documentCache会导致执行缓存失效所花费的时间增加。
-
-
使用Oak 1.4.x在AEM 6.2中缓存设置:
- 在AEM 6.2中,对这些缓存设置的工作方式进行了更改。 在带有Oak 1.4的AEM 6.2中,新增了缓存:prevDocCache。 您可以使用设置prevDocCachePercentage配置此缓存。 默认值为4。
- documentCache使用剩余的高速缓存MB(缓存设置减去所有其他缓存的大小): documentCache =缓存 — nodeCache — 子缓存 — diffCache - docChildrenCache - prevDocCache
-
实施MongoDB生产核对清单:
https://docs.mongodb.org/manual/administration/production-checklist/ — 根据Mongo DB支持,许多项目对性能有重大影响。 如有任何问题,请直接联系MongoDB支持。 -
读取性能: 将此查询字符串参数添加到每个AEM节点上的Mongo DB URL中: ?readPreference=secondaryPreferred
此参数告知系统从次映像进行读取,这可以提高读取性能。 -
增加oak-observation的线程池: 打开 /system/console/configMgr/org.apache.sling.commons.threads.impl.DefaultThreadPool.factory 将名称设置为oak-observation ,并将最小和最大池大小设置为20。
-
增加观察队列长度: 创建名为 com.adobe.granite.repository.impl.SlingRepositoryManager.cfg 的文件,该文件包含参数 oak.observation.queue-length=50000。 将其放在 /crx—quickstart/install 文件夹下。
-
避免长时间运行的查询:在JVM参数 -Doak.mongo.maxQueryTimeMS=60000 中设置系统属性,以避免查询运行时间超过1分钟。
-
-
Tar存储调整
微内核不直接调用内存映射文件。 但是,JDK在内部使用内存映射文件来高效读取。 在某些Windows 64位操作系统上,无法清除内存映射的文件并占用所有本机操作系统内存。 确保安装来自microsoft的性能相关修补程序/修补程序(请参阅KB 2731284)并Oracle。另一种选择是通过在SegmentNodeStoreService.config中添加 tarmk.mode=32 来禁用内存映射模式,直到操作系统问题得到解决。 禁用带来的负面影响会使I/O变得密集。 确保提高I/O页锁定限制。
-
TarMK修订版清理(压缩)
从AEM 6.3开始,默认情况下启用联机压缩(也称为联机修订版清理)。 有关详细信息,请参阅此页面。 -
用于AdobeManaged Services (AMS)用户的Cloud Manager
Cloud Manager(仅限AMS用户)允许您通过引导式性能测试和自动缩放来确保AEM部署成功。