我正在开发一个项目,该项目从 Solr 获取某些指标,将它们存储在 Elastic Search 的索引中,并在 Grafana 上进一步以图形方式表示它们。对 Solr 中的垃圾回收有一定的查询,如下所示:
- 垃圾收集器如何影响 Solr 的哪些指标(如错误、命中、插入等)?
- 我们应该跟踪哪些垃圾收集器指标可能会对 Solr 产生影响?(如 YGC YGCT FGC FGCT 等)
提前致谢!
我正在开发一个项目,该项目从 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
让我知道这是否回答了您的问题。