【问题标题】:Cassandra client behaviour during GC pauseGC 暂停期间的 Cassandra 客户端行为
【发布时间】:2016-07-13 19:52:58
【问题描述】:

假设我们有一个带有节点 [A,B,C] 的 cassandra 集群,现在客户端 X 向节点 A 发出请求。现在如果旧 gc 开始在 A 上运行。节点 A 将被暂停。现在在以下情况下客户端请求的行为会是什么

  1. 在客户端请求到达 A 之前开始 GC 暂停
  2. 客户端请求到达 A 后开始 GC 暂停

将请求转到另一个节点,否则它将一直等待回复直到指定的超时。

cassandra 中的读取延迟指标是否也考虑了这个 GC 暂停时间?

【问题讨论】:

    标签: cassandra garbage-collection


    【解决方案1】:

    据我所知,驱动程序不知道节点何时遇到 GC 暂停。假设 GC 暂停通常很短。

    据我所知,如果某些请求在 GC 暂停期间碰巧到达节点,这会导致它们的响应时间偶尔出现尖峰。

    我想如果 GC 暂停时间足够长,那么客户端会收到超时错误并需要重试请求。

    我不使用 Cassandra 提供的任何延迟指标。我认为测量客户端应用程序中的延迟更准确。如果您想忽略 GC 暂停的延迟峰值,请测量中间延迟时间,因为它对外围峰值延迟时间不敏感。如果您想考虑尖峰,请计算平均延迟时间,因为尖峰会拉高平均值。

    【讨论】:

    • 即使我同意你在客户端应用程序测量延迟指标。在我的客户端指标中,我可以看到延迟峰值,而在 cassandra 的读取延迟指标中没有观察到这样的峰值。所以我认为这可能是由于 gc 暂停。无论如何要确认这一点?
    • 我不确定有没有简单的方法。您可以将 Cassandra 设置为生成 gc 日志,并且您可以查看这些日志以了解 gc 何时发生以及它们花费了多长时间。您必须查看所有节点,因为很难确切知道特定请求去了哪个节点。在查看我的一个集群时,我发现 GC 通常需要 0.01 到 0.09 秒,但偶尔会有更长的 2.91 秒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多