垃圾收集器对 Solr 的影响

Garbage Collector implications on Solr

我正在开发一个项目,该项目从 Solr 获取某些指标,将它们存储在 Elastic Search 的索引中,并进一步在 Grafana 上以图形方式表示它们。在Solr中对垃圾收集有一些查询,它们如下:

提前致谢!

GC 不应改变应用程序逻辑本身:命中率等指标取决于 Solr 数据存储的内容,而不取决于 GC 是否运行或如何运行。错误可能会受到 GC 行为的影响,主要是由大量 GC 暂停引起的超时,这是我说你需要首先跟踪的。

我会关注 GC 时间(新旧代),因为这将是应用程序 (Solr) 的主要中断。您可以通过 JMX 执行此操作(此处有大量文档:https://wiki.apache.org/solr/SolrJmx,您可以在 java.lang:type=GarbageCollector 下找到 GC bean)。只需连接您选择的分析器或监控工具。

在控制台上,您可以使用 "jstat -gc $PID" 转储 GC 指标,其中最相关的指标可能是 ([docs][1]):

YGC: Number of young generation garbage collection events.
YGCT: Young generation garbage collection time.
FGC: Number of full GC events.
FGCT: Full garbage collection time.

请注意,时间是累积的。如果您在 jstat 命令中添加一个时间间隔,它将连续输出统计信息。

根据这些数字,如果您遇到 GC 暂停峰值,并且这些与 Solr 错误峰值相关,您可以考虑减少它们。

虽然我们正在这样做,但跟踪 GC 时间的另一种好方法是启用:

-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCDetails

它将记录每个 GC 的更多具体细节,包括时间以及每次暂停的持续时间(由 GC 以及其他原因引起),如下所示:

Total time for which application threads were stopped: 0.1135087 seconds

如果这回答了您的问题,请告诉我。