IDC

一次Zookeeper bug排查之旅 论程序员曾遇到关于性能的那些事

作者:admin 2021-04-19 我要评论

起因 某一天突然有同事说zk client连不上server,考虑到最近业务代码没有变更,怀疑是运维同学做了什么操作导致,急忙联系运维同学,确实最近做了变更。为了避免...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

起因

某一天突然有同事说zk client连不上server,考虑到最近业务代码没有变更,怀疑是运维同学做了什么操作导致,急忙联系运维同学,确实最近做了变更。为了避免扩大影响范围,先让运维同学回滚了变更,回滚后可以正常访问了。

复现问题

询问运维同学后,得到变更流程:由于zk集群有一台服务器存在性能隐患,需要变更到新的一个实例。于是运维先将新机器加入zk集群,修改旧服务器上配置逐个重启,重启后新zk的角色是leader,此时zk状态正常,运维同学也就认为变更完成。

结果意想不到的是使用mntr命令查看,所有的机器状态都是正常,但是zk client无法访问,一访问就卡住,问题可以在测试环境稳定复现。

问题排查

1 猜测zk端口没有监听成功,登录服务器使用netstat查看server打开的三个端口都是正常状态,也使用了telnet测试可以连上。

2 猜测同步节点数不足一半,或者follower连不上leader触发重新选举,但很快就被排除,因为上面说了使用mntr命令查看节点状态都正常,从日志中也未能找到对应日志记录。

3 我们再使用stat来观察server的连接情况,运行zk client发现server收到了client的请求,但是没有回消息,看来原因就是zk server没处理client的请求了。

跟踪到这里,就应该进入源码了,由于对zk源码不熟悉,咨询了某位大佬,建议我们看zk请求处理类CommitProcessor。

在CommitProcessor我们发现了原因,代码如下:

  1. <code>@Override 
  2. public void start() { 
  3.     ... 
  4.     if (workerPool == null) { 
  5.         workerPool = new WorkerService("CommitProcWork", numWorkerThreads, true); 
  6.     } 
  7.     ... 
  8.  
  9. public void shutdown() { 
  10.     LOG.info("Shutting down"); 
  11.  
  12.     halt(); 
  13.  
  14.     if (workerPool != null) { 
  15.         workerPool.join(workerShutdownTimeoutMS); 
  16.     } 
  17.  
  18.     if (nextProcessor != null) { 
  19.         nextProcessor.shutdown(); 
  20.     } 
  21. </code><button>复制</button> 

在shutdown中调用了 workerPool.join实际上已经将请求处理的开关关闭了,但是并没有将workerPool设置为null。在start方法中会根据workerPool==null来创建WorkerService并开始处理请求。

修改后重新验证解决。


本文转载自网络,原文链接:https://club.perfma.com/article/2319810?utm_source=tuicool&utm_medium=referral

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 腾讯云轻量应用服务器跟云服务器有什么

    腾讯云轻量应用服务器跟云服务器有什么

  • 一次Zookeeper bug排查之旅   论程序员

    一次Zookeeper bug排查之旅 论程序员

  • 傻傻分不清之Cookie、Session、Token、

    傻傻分不清之Cookie、Session、Token、

  • 编程须谨记:大象不咬人,蚊子却致命

    编程须谨记:大象不咬人,蚊子却致命

腾讯云代理商
海外云服务器