2016-08-11 52 views
-1

以下是我们用于AEM应用程序的Java配置。AEM中的数据存储垃圾收集和java垃圾收集之间的区别

java -server -Xms4096m -Xmx4096m -XXermSize=2048m -XX:MaxPermSize=2048m -Djava.awt.headless=true -Djava.io.tmpdir=<path>/tmp -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<path>/crx-quickstart/logs/heap_dump.hprof -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -Xloggc:<path>/crx-quickstart/logs/gc.log -Dcom.sun.management.config.file=<path>/management/management.properties -Dsling.run.modes=author,crx3,crx3tar -Dorg.apache.felix.http.host=<ip-address> -jar crx-quickstart/app/cq-quickstart-6.1.0-standalone-quickstart.jar start -c crx-quickstart -i launchpad -nofork -p 40601 -a <ip-address> -Dsling.properties=conf/sling.properties 

每当我们尝试构建大坝资产备份包时,AEM服务器都会挂起,页面暂时不可用。过了一段时间,服务器自行出现。我们注意到GC日志的大小突然激增。不确定它们是否相关。数据存储垃圾收集和Java垃圾收集有什么区别?

回答

0

AEM GC

当传统WCM资产被移除,则参照底层数据存储记录可以从节点层次结构被移除,但数据存储区记录本身保持。这个未被引用的数据存储记录会变成“垃圾”,不需要保留。

AEM使用存储库中存储了许多内部和内务管理活动:

  1. 包内置和下载的出版复制
  2. 工作流程的有效载荷临时创建
  3. 资产所创造
  4. 临时文件在DAM渲染期间

当这些临时o对象足够大以至于需要在数据存储中存储,并且当对象最终不再使用时,数据存储记录本身仍然是“垃圾”。

例如:

说到包装。与其他所有内容一样,包数据存储在存储库中,因此存储在数据存储中的数据包大于4KB。在开发项目过程中或者在维护系统的过程中,随着时间的推移,软件包可能会被构建和重建很多次,每次构建都会产生一个新的数据存储记录,使之前的构建记录成为孤儿。

我们下面要记住指出的是

  1. “垃圾收集需要时间,可能会影响性能,所以应该进行相应规划”
  2. “清除垃圾的记录,不影响正常性能,所以这不是性能优化“

垃圾co当过程开始时,选择器首先记录当前时间戳。然后使用多遍标记/扫描模式算法执行GC。

在第一阶段中,垃圾收集器执行所有存储库内容的全面遍历。对于每个具有对数据存储记录的引用的内容对象,它将文件定位到文件系统中,执行元数据更新 - 修改“最后修改”或MTIME属性。此时此阶段访问的文件比初始基线时间戳更新。

在第二阶段,垃圾回收器遍历数据存储的物理目录结构,就像“find”一样。它审查文件的“上次修改”或MTIME属性,并提出以下决定:

  • 如果MTIME比初始基线时间戳更新,记录被认为是积极和文件不得删除。
  • 如果MTIME在初始基准时间戳之前,考虑可移动垃圾。

MTIME =文件修改时间

这种方法适用于有私人数据存储的单一节点。 共享数据存储需要不同的GC方法。

欲了解更多信息,你可以找到以下的Adobe文档。 https://docs.adobe.com/docs/en/aem/6-2/administer/operations/data-store-garbage-collection.html

JAVA垃圾收集:http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html