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

防止性能问题

以下是您可以采取的一些步骤,以确保在性能问题影响用户之前发现并修复这些问题:

  1. 实施并执行模拟创作实例和发布实例中真实场景的负载测试。 研究和定义预期载荷是这一过程中的关键步骤。 此步骤可帮助您演示AEM应用程序、架构和AEM安装在生产环境中上线后是否能够正常运行。
    本练习的结果有助于确定是否存在配置错误、应用程序问题、大小调整、硬件问题或其他影响系统性能的问题。 另请参阅 性能准则 和 监视准则.

  2. 除了负载测试之外,压力测试有助于定义系统可处理的最大负载。 此测试可帮助您为流量尖峰做好准备。 有关性能测试的更多信息,请访问 此处.

  3. 安装推荐的AEM Service Pack、累积修补程序包和修补程序: Adobe Experience Manager版本更新.

  4. 如果您使用的是Windows服务器,请查看 本文.

  5. 如果您计划将大量资产(图像、视频等)加载到AEM中,请确保应用 资产最佳实践.

  6. 配置足够的RAM并避免IO饱和
    如果您打算以任何规模运行生产,则应为Linux环境预配RAM,因为区段tar文件在离线压缩(或在线压缩峰值)之间将增长到多少。 此外,以下选项可避免IO饱和。

    • 单独的操作系统、数据和日志记录磁盘
    • 使用Noatime装载数据磁盘。
    • 在数据磁盘上将预读缓冲区设置为32。
    • 理想情况下,在数据磁盘上使用XFS over ext4。
    • 如果RedHat在VM中运行,请确保熵池始终为 > 1K位(必要时使用rngtools)
  7. 在Linux上禁用透明超大页面
    AEM执行细粒度读取/写入,而Linux Transparent Great Pages针对大型操作进行了优化,因此建议执行以下操作 禁用透明超大页面 使用Mongo或Tar存储时。

  8. 启用临时工作流
    临时工作流可用于满足以下条件的任何工作流:

    • 经常运行。
    • 不需要工作流历史记录。

    它们将在这些情况下带来性能提升。
    通常在摄取大量资产时满足此使用案例。
    请遵循以下文档所述的过程: 性能调整资源.

  9. 调整Sling作业队列
    批量上传大型资产通常是一个非常占用资源的过程。 默认情况下,每个作业队列的并发线程数等于CPU核心数。 因此,此值设置可能会导致整体性能受到影响和Java栈使用量过高。
    Adobe建议不要超过CPU核心的50%。 要调整此值,请转到以下位置: https:/host:port/system/console/configMgr/org.apache.sling.event.jobs.QueueConfiguration Set queue.maxparallel 设置为一个值,表示承载AEM实例的服务器的CPU内核的50%。 例如,对于8个CPU内核,将该值设置为4。

  10. 调整Oak存储库
    首先确保为AEM 6实例安装了最新的Oak版本。 请查看上面提到的推荐修补程序页面。

    Oak查询引擎/索引优化

    • 为所有常用的搜索查询创建自定义Oak索引。

      • 有关如何分析慢查询的信息,请参阅此 文章.
      • 在oak:index节点下为要搜索的所有搜索属性创建自定义索引,方法如下 文章.
      • 对于每个基于Lucene的自定义索引,尝试设置includedPaths(字符串)设置,以限制索引仅应用于某些内容路径。 然后,将适用的搜索限制为索引所包含的路径。
    • 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起,默认启用)
      • 启用 写入时复制 (自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建议使用负载测试来验证设置更改,同时监控内存利用率。

  11. Mongo存储调整

    • MongoBlobStore缓存大小: blobstore用于存储和读取大型二进制对象。 在内部,实现具有高速缓存的存储器,它将二进制文件分割成相对较小的块(数据或散列代码或间接散列),以便每个块适合内存。 在默认设置中,MongoBlobStore使用16MB的固定缓存大小。 对于有更多RAM可用且经常访问Blob存储的部署(例如,当Lucene索引较大时),请增加缓存大小。 此缓存大小仅适用于使用MongoBlobStore(默认)的情况,而不适用于使用外部Blobstore的情况。

      • 您可以通过上的blobCacheSize设置配置缓存大小(以MB为单位) DocumentNodeStoreService.
        例如:blobCacheSize=1024
      • 另请查看AEM-MongoDB 清单.
    • 文档缓存大小: 要优化从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 = cache - nodeCache - childrenCache - diffCache - docChildrenCache - prevDocCache
    • 实施MongoDB生产核对清单:
      https://docs.mongodb.org/manual/administration/production-checklist/ — 根据Mongo DB支持,许多项目对性能有重大影响。 如有任何问题,请直接联系MongoDB支持。

    • 读取性能: 将此查询字符串参数添加到每个AEM节点上的Mongo DB URL中: ?readPreference=secondaryPreferred
      此参数告知系统从次映像进行读取,这可以提高读取性能。

    • 增加用于Oak观察的线程池: open /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参数中设置system属性: -Doak.mongo.maxQueryTimeMS=60000 以避免查询运行时间超过1分钟。

  12. Tar存储调整
    微内核不直接调用内存映射文件。 但是,JDK在内部使用内存映射文件来高效读取。 在某些Windows 64位操作系统上,无法清除内存映射的文件并占用所有本机操作系统内存。 确保安装来自microsoft的性能相关修补程序/修补程序(请参阅 KB 2731284)和Oracle。

    另一种选择是通过添加内存映射模式来禁用该模式 tarmk.mode=32SegmentNodeStoreService.config 直到解决操作系统问题。 禁用带来的负面影响会使I/O变得密集。 确保提高I/O页锁定限制。

  13. TarMK修订版清理(压缩)
    从AEM 6.3开始,默认情况下启用联机压缩(也称为联机修订版清理)。 请参阅 此页面 以了解更多信息。

  14. 用于AdobeManaged Services (AMS)客户的Cloud Manager
    Cloud Manager (仅限AMS客户)允许客户通过引导式性能测试和自动缩放来确保AEM部署成功。

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