在zk模板配置文件中有:

  1. # the maximum number of client connections.
  2. # increase this if you need to handle more clients
  3. maxClientCnxns=60

这个配置的作用就是:一个ip所对应的客户机,只能和zk服务器维持60个连接。

以NIOServerCnxnFactory为例:

  1. public abstract class ServerCnxnFactory {
  2. //存放zk所有连接
  3. protected final HashSet<ServerCnxn> cnxns = new HashSet<ServerCnxn>();
  4. }
  5.  
  6. public class NIOServerCnxnFactory extends ServerCnxnFactory implements Runnable {
  7. //客户端ip -> 客户端的连接集合
  8. final HashMap<InetAddress, Set<NIOServerCnxn>> ipMap = new HashMap<InetAddress, Set<NIOServerCnxn>>( );
  9. //获取指定ip的连接数
  10. private int getClientCnxnCount(InetAddress cl) {
  11. // The ipMap lock covers both the map, and its contents
  12. // (that is, the cnxn sets shouldn't be modified outside of
  13. // this lock)
  14. synchronized (ipMap) {
  15. Set<NIOServerCnxn> s = ipMap.get(cl);
  16. if (s == null) return 0;
  17. return s.size();
  18. }
  19. }
  20. public void run() {
  21. while (!ss.socket().isClosed()) {
  22. try {
  23. selector.select(1000);
  24. Set<SelectionKey> selected;
  25. synchronized (this) {
  26. selected = selector.selectedKeys();
  27. }
  28. ArrayList<SelectionKey> selectedList = new ArrayList<SelectionKey>(
  29. selected);
  30. Collections.shuffle(selectedList);
  31. for (SelectionKey k : selectedList) {
  32. if ((k.readyOps() & SelectionKey.OP_ACCEPT) != 0) {
  33. SocketChannel sc = ((ServerSocketChannel) k
  34. .channel()).accept();
  35. InetAddress ia = sc.socket().getInetAddress();
  36. //获取客户端连接数
  37. int cnxncount = getClientCnxnCount(ia);
  38. //单个客户端连接数超过限制
  39. if (maxClientCnxns > 0 && cnxncount >= maxClientCnxns){
  40. LOG.warn("Too many connections from " + ia
  41. + " - max is " + maxClientCnxns );
  42. sc.close();
  43. } else {
  44. LOG.info("Accepted socket connection from "
  45. + sc.socket().getRemoteSocketAddress());
  46. sc.configureBlocking(false);
  47. SelectionKey sk = sc.register(selector,
  48. SelectionKey.OP_READ);
  49. NIOServerCnxn cnxn = createConnection(sc, sk);
  50. sk.attach(cnxn);
  51. addCnxn(cnxn);
  52. }
  53. } else if ((k.readyOps() & (SelectionKey.OP_READ | SelectionKey.OP_WRITE)) != 0) {
  54. NIOServerCnxn c = (NIOServerCnxn) k.attachment();
  55. c.doIO(k);
  56. } else {
  57. if (LOG.isDebugEnabled()) {
  58. LOG.debug("Unexpected ops in select "
  59. + k.readyOps());
  60. }
  61. }
  62. }
  63. selected.clear();
  64. } catch (RuntimeException e) {
  65. LOG.warn("Ignoring unexpected runtime exception", e);
  66. } catch (Exception e) {
  67. LOG.warn("Ignoring exception", e);
  68. }
  69. }
  70. closeAll();
  71. LOG.info("NIOServerCnxn factory exited run method");
  72. }
  73.  
  74. }

tips: 关心这个参数,是因为之前有人上线时,客户端连接数超过了默认值,导致无法建立连接。

zk maxClientCnxns参数的更多相关文章

  1. dubbo、zookeeper心跳相关参数解析与测试

    dubbo consumer和provider的心跳机制 dubbo客户端和dubbo服务端之间存在心跳,目的是维持provider和consumer之间的长连接.由dubbo客户端主动发起,可参见d ...

  2. Zookeeper的基本原理(zk架构、zk存储结构、watch机制、独立安装zk、集群间同步复制)

    1.Hbase集群的高可用性与伸缩性 HBase可以实现对Regionserver的监控,当个别Regionserver不可访问时,将其负责的分区分给其他Regionsever,其转移过程较快,因为只 ...

  3. 基于ZooKeeper,Spring设计实现的参数系统

    一.简介 基于ZooKeeper服务端.ZooKeeper Java客户端以及Spring框架设计的用于系统内部进行参数维护的系统. 二.设计背景 在我们日常开发的系统内部,开发过程中最常见的一项工作 ...

  4. Zookeeper运维问题集锦

    实际工作中用到Zookeeper集群的地方很多, 也碰到过各种各样的问题, 在这里作个收集整理, 后续会一直补充; 其中很多问题的原因, 解决方案都是google而来, 这里只是作次搬运工; 其实很多 ...

  5. Zookeeper开发常见问题

    背景与目的 Zookeeper开发过程中遇到一些常见问题,为了后续开发不犯同样的错误,总结一下此类问题,并进行分析和解决. 适合人员 主要适合zookeeper开发.测试及运维相关人员. 问题与解决 ...

  6. Mesos+Zookeeper+Marathon+Docker环境搭建

    相关理论请参考:https://www.cnblogs.com/Bourbon-tian/p/7155054.html,本文基于https://www.cnblogs.com/Bourbon-tian ...

  7. kafka概念

    一.结构与概念解释 1.基础概念 topics: kafka通过topics维护各类信息. producer:发布消息到Kafka topic的进程. consumer:订阅kafka topic进程 ...

  8. 大数据平台常见异常-zookeeper

    本文主要阐述大数据平台环境zookeeper常见异常和解决方案 1.Connection reset by peer异常 异常说明 我们现在项目有个任务OneMinuteDataSync是用spark ...

  9. 深度学习之循环神经网络(RNN)

    循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络,适合用于处理视频.语音.文本等与时序相关的问题.在循环神经网络中,神经元不但可以接收其他神经元 ...

随机推荐

  1. CentOS7安装redis5.0

    下载好redis5.0后解压在/tmp目录 cd /tmp/redis-/ make make过程中可能出现make[1]: *** [adlist.o] 错误 127,这是因为CentOS7默认没有 ...

  2. Ubuntu下使用face_recognition进行人脸识别

    Face Recognition是一个基于Python的人脸识别库,在github上地址如下:https://github.com/ageitgey/face_recognition. 看着挺好玩,本 ...

  3. QTQuick控件基础(2)

    import QtQuick 2.2import QtQuick.Controls 1.2import QtQuick.Window 2.1ApplicationWindow {    visible ...

  4. 20162311 Hash 补分博客

    20162311 Hash 补分博客 一.任务详情 二.解题过程 除留余数法和拉链法都懂了,也都会做,主要是开放寻址法.课下查了一些资料,也问了老师才彻底理解 引用例子 引用网上的一个例子来理解 参考 ...

  5. 多态时最好将基类的析构函数设为virtual、 C++中两个类相互包含引用问题 (转载)

    多态:http://blog.csdn.net/tmljs1988/article/details/8146521 C++中两个类相互包含引用问题:http://blog.csdn.net/leo11 ...

  6. Python3基础 __getattr__ 访问不存在的属性时,新增提示功能

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  7. 51NOD 1087 1 10 100 1000

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1087 暴力大法 #include<bits/stdc++.h> ...

  8. Spring security框架原理

    转自: http://www.blogjava.net/youxia/archive/2008/12/07/244883.html  在SpringSide 3的官方文档中,说安全框架使用的是Spri ...

  9. org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement profile

    原创:转载请注明出处 1.异常情况 org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected ...

  10. windows 模拟用户会话创建进程

    在渗透当中,经常会碰到这样的问题.一个机器,机器上好几个用户,或者域内,想让某个机器的某个会话执行你想要执行的程序,或者中马,以当前会话来上线. 现在模拟如下的一个情况: 严格的DMZ,内网--> ...