【发布时间】:2016-02-01 12:30:03
【问题描述】:
我已阅读说明
do not use swap
在 zookeeper 和 kafka 上都有。我知道 kafka 依靠页面缓存将部分顺序日志保留在内存中,即使它们被写入磁盘。
但无法理解交换如何损害 zk 和 kafka。
【问题讨论】:
标签: apache-kafka apache-zookeeper
我已阅读说明
do not use swap
在 zookeeper 和 kafka 上都有。我知道 kafka 依靠页面缓存将部分顺序日志保留在内存中,即使它们被写入磁盘。
但无法理解交换如何损害 zk 和 kafka。
【问题讨论】:
标签: apache-kafka apache-zookeeper
交换可能会导致性能和稳定性问题;在您的示例中,您不希望 Linux 内核“错误地/意外地”交换您的 Kafka 或 ZooKeeper 进程。
另外,swapping may be particularly bad for JVM processes 如 Kafka 和 ZooKeeper,引用:
[The] JVM 通常不会执行完整的 GC 循环,直到它用完其允许的堆,因此您的大部分堆可能被尚未收集的垃圾占用。由于这些页面没有被触及(因为它们是垃圾,因此未被引用),操作系统很乐意将它们换掉。当 GC 最终运行时,你有一个荒谬的交换风暴,拉入所有这些页面,然后发现它们实际上充满了垃圾,应该被丢弃;这很容易让您的 GC 周期花费几分钟!
因此建议通过将vm.swappiness 设置为0 来禁用交换,尽管对于某些操作系统,如 RHEL 6.5,这实际上应该是1(因为值0 的语义在这些操作系统上已更改) .请注意,可能仍会发生一些交换。
以下链接可能会进一步阐明您的问题。他们分别解释了为什么要禁用 Hadoop 和 Elasticsearch 的交换,这与你应该禁用 Kafka 和 ZooKeeper 的交换的原因相同:
【讨论】: