Alfresco 搜索服务和 OpenJDK11 的 GC / OOM 问题

GC / OOM problems with Alfresco Search Services and OpenJDK11

我将 Alfresco 搜索服务从 1.3 更新到 1.4,这迫使我也将 OpenJDK 从 8 更新到 11。运行 使用 jdk8 的 Alfresco 搜索服务 1.3 在(重新)期间没有任何 OutOfMemoryExceptions索引,但使用 jdk11 我们看到可重复地增加堆,直到 solr oom killer 杀死 solr 进程。在索引期间,jvm 使用 jdk 连续执行 GC,但我猜 jdk11 以对象将在内存中停留更长时间的方式更改了 GC。连续 GC 表明对象创建效率低下,但这不是我可以影响的。我尝试使用 UseConcMarkSweepGC 和 G1 垃圾收集器,但行为相同。有谁知道如何在 OpenJDK 11 中配置 GC 以使其行为类似于在 OpenJDK8 中使用 Alfresco Search Services / solr6?

我的参数在solr.in.sh

SOLR_JAVA_MEM="-Xms16g -Xmx30g"
SOLR_OPTS="$SOLR_OPTS -Dsolr.jetty.request.header.size=1000000 -Dsolr.jetty.threads.stop.timeout=300000 -Ddisable.configEdit=true -Dsolr.allow.unsafe.resourceloading=true"
SOLR_OPTS="$SOLR_OPTS -XX:+UseConcMarkSweepGC -XX:-DisableExplicitGC -XX:-UseGCOverheadLimit"
SOLR_OPTS="$SOLR_OPTS -server -Djava.net.preferIPv4Stack=true -Duser.language=en -Duser.country=US -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.net.preferIPv6Addresses=false"
SOLR_OPTS="$SOLR_OPTS -Dsun.security.ssl.allowUnsafeRenegotiation=true -Dsolr.allow.unsafe.resourceloading=true"

问题是由 Alfresco Solr Tracker 中的错误引起的,该错误无法正确识别递归(例如,组作为组中的成员或 Alfresco 中的次级子关联)。我们通过将所有二级子关联替换为露天链接来解决问题。 Alfresco Search Services 2.0 应该修复该递归问题,但这需要 Alfresco Content Services 6.2