在我们的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 :(得分:0)
AEM GC
删除传统WCM资产时,可能会从节点层次结构中删除对基础数据存储记录的引用,但数据存储区记录本身仍然存在。这个未引用的数据存储记录然后变成&#34;垃圾&#34;不需要保留。
AEM使用存储库作为许多内部和内务活动的存储:
当这些临时对象中的任何一个足够大以至于需要在数据存储区中存储时,并且当对象最终不再使用时,数据存储区记录本身仍为&#34;垃圾&#34;。
示例:
来包装时。与其他所有内容一样,包数据存储在存储库中,因此存储在数据存储区中的大于4KB的包中。在开发项目的过程中或者在维护系统的过程中,可以多次构建和重建软件包,每次构建都会产生新的数据存储记录,孤立以前构建的记录。
我们必须记住以下几点
- &#34;垃圾收集需要时间并可能影响性能,因此应该相应地进行规划&#34;
- &#34;删除垃圾记录不会影响正常性能,因此这不是性能优化&#34;
醇>
垃圾收集器首先记下进程开始时的当前时间戳。然后使用多次通过标记/扫描模式算法执行GC。
在第一阶段中,垃圾收集器会对所有存储库内容执行全面遍历。对于每个引用数据存储记录的内容对象,它将文件定位在文件系统中,执行元数据更新 - 修改&#34;最后修改的&#34;或MTIME属性。此时,此阶段访问的文件将比初始基准时间戳更新。
在第二阶段,垃圾收集器遍历数据存储的物理目录结构,其方式与&#34; find&#34;完全相同。它检查了&#34;最后一次修改&#34;或文件的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