【问题标题】:Why is IO 99.99 % even though the Disk Read And write seems to be very small为什么 IO 99.99 % 即使磁盘读写看起来很小
【发布时间】:2019-06-04 11:46:47
【问题描述】:

我们的一个 Kafka 代理在 8 核机器上的平均负载非常高(平均约为 8)。虽然这应该没问题,但我们的集群似乎仍然面临问题,并且生产者未能以通常的速度刷新消息。

经过进一步调查,我发现我的 java 进程等待 IO 的时间太长了,几乎 99.99% 的时间都在等待,到目前为止,我认为这是一个问题。

请注意,即使负载相对较低(大约 100-150 Kbps)也会发生这种情况,我已经看到即使在集群中输入 2 Mbps 的数据时它也能完美运行。

我不确定这个问题是否是因为 Kafka,我假设这不是因为所有其他代理在此期间都运行良好,并且我们的数据在 5 个代理之间完美分配。

请帮助我找出问题的根本原因。我应该去哪里寻找问题?有没有其他工具可以帮助我调试这个问题?

我们在 m5.2x 大型机器上使用 1 TB 安装的 EBS 卷。

请随时提出任何问题。

GC 日志快照

【问题讨论】:

  • 你检查GC日志了吗?
  • 我现在没有捕获 GC 日志,但是我的 JMX 日志表明 GC 时间确实增加了。通常它会保持在 1% 以下,但是当这个 IO 问题发生时,GC 时间会增加 15-20% 之多。我不明白GC和IO之间的关系。你能帮我理解这两者是如何相关的吗?
  • 检查 GC 是否导致世界停止 stackoverflow.com/questions/16695874/…?
  • 我将立即开始捕获 GC 日志并通知您?或者有没有办法在没有这些日志的情况下知道它?
  • 您必须在我有限的知识范围内检查GC日志

标签: amazon-web-services server io apache-kafka disk-io


【解决方案1】:

找出问题后回答我自己的问题。

事实证明,真正的问题与 st1 硬盘驱动器的工作方式有关,而不是与 kafka 或 GC 有关。

st1 HDD 卷类型针对涉及大型顺序 I/O 的工作负载进行了优化,但在处理小型随机 IO 时性能非常差。你可以阅读更多关于它的信息here。 虽然它应该只适用于 Kafka,但我们将 Kafka 应用程序日志写入同一个 HDD,这增加了很多 READ/WRITE IO,随后在高峰时间很快耗尽了我们的突发信用。只要我们有可用的突发积分并且在积分耗尽后性能下降,我们的集群就可以正常工作。

这个问题有几种解决方案:

  1. 首先删除任何将 IO 负载添加到 st1 驱动器的外部应用程序,因为它不适用于那些小型随机 IO。
  2. 增加这种 st1 并行驱动器的数量来分担负载。这在 Kafka 中很容易做到,因为它允许我们将数据保存在不同驱动器的不同目录中。但是只有新的主题才会被划分,因为在创建主题时会将分区分配给目录。
  3. 使用 gp2 SSD 驱动器,因为它们可以很好地管理这两种负载。但这些都很贵。
  4. 使用适合您用例的更大的 st1 驱动器,因为吞吐量和突发积分取决于磁盘的大小。 READ HERE

This 文章帮助我解决了很多问题。

谢谢。

【讨论】:

    猜你喜欢
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2016-01-12
    相关资源
    最近更新 更多