zookeeper|zookeeper globalOutstandingLimit
这个配置指定了等待处理的最大请求数量的限制(zookeeper.globalOutstandingLimit)
client发送请求的速度可能会比server端处理的速度快,会导致请求在server端排队,最终(在若干秒内)会使server的内存耗尽。
为了避免这一点,如果等待的请求数量达到了globalOutstandingLimit,server端会拒绝client的请求。
但是这个限制不是hard限制。每一个client至少能有一个outstanding请求,否则连接会开始出现超时。
所以,当达到globalOutstandingLimit之后,只有在没有任何的pending请求时,server才会从client连接读取数据
为了决定某一台确定的server的限制,可以简单的用这个配置项的值除以server的数量。
现在没有一种聪明的方式来决定这个值来进行限制,总的说来,这个配置项的值就是outstanding请求的上限。
实际上,负载无法在server间进行均衡,总有一些server的负载会高一些,即使没有达到上限。
默认的限制为1000个请求。通常不需要改变这个配置,如果有很多client会发送非常大的请求,你需要调低这个值,但是在实践中通常不需要改变这个值。
//最大请求堆积数。默认是1000。ZK运行的时候, 尽管server已经没有空闲来处理更多的客户端请求了,但是还是允许客户端将请求提交到服务器上来,以提高吞吐性能。当然,为了防止Server内存溢出,这个请求堆积数还是需要限制下的。
(Java system property:zookeeper.globalOutstandingLimit. )
globalOutstandingLimit 的配置
export JVMFLAGS="-Xloggc:$ZOOBINDIR/../../logs/zk.gc.log -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintHeapAtGC -Dzookeeper.globalOutstandingLimit=2000 $JVMFLAGS"
生效, 可以看出 如果设置了2000, 3台机器, 那么每台机器限制是 2000/(3-1) = 1000
@Override
public int getGlobalOutstandingLimit() {
return super.getGlobalOutstandingLimit() / (self.getQuorumSize() - 1);
}
【zookeeper|zookeeper globalOutstandingLimit】转载于:https://www.cnblogs.com/allenhaozi/p/11416817.html
推荐阅读
- 关于分布式锁|关于分布式锁 Redis 与 Zookeeper 的原理,它们如何实现分布式锁()
- linux下zookeeper安装
- Apache|Apache Zookeeper总结
- Zookeeper的sync操作是什么()
- 搭建大数据三节点(Hadoop、Hbase、Zookeeper、Kafka、Hive)环境(含配置文件参考)
- 006—Zookeeper—客户端使用-3
- 分布式集群|一起进阶学习JAVA(Zookeeper)
- 不愧是清华大佬!把Zookeeper讲的如此简单明了
- Zookeeper 集群4字命令白名单 stat is not executed because it is not in the whitelist.
- SpringCloud Eureka集群及CAP原则对比Zookeeper