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

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

[[389119]]

起因

某一天突然有同事说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并开始处理请求。

修改后重新验证解决。

 

责任编辑:张燕妮 来源: PerfMa应用性能技术社区
相关推荐

2015-08-19 09:10:37

程序员面试

2019-05-29 08:04:44

Zookeeper迁移扩展

2016-02-26 15:25:45

程序员Bug反应

2015-04-09 13:52:47

程序员在家办公

2020-11-02 09:48:35

C++泄漏代码

2011-03-22 10:49:53

2013-07-17 18:00:02

程序员禁忌程序员错误程序员bug

2018-01-30 09:19:46

程序员技能Bug

2019-09-12 17:09:52

程序员跳槽那些事儿编程语言

2023-01-20 11:51:40

性能测试系统

2012-10-19 09:27:23

Ruby

2017-01-23 12:40:45

设计演讲报表数据

2024-03-18 00:00:05

Java服务JVM

2020-02-28 15:49:26

2015-11-04 11:38:40

bug程序员

2013-04-15 10:55:09

程序员

2019-09-15 19:17:02

性能测试

2010-11-22 13:28:55

2018-07-03 10:49:22

性能故障排查

2013-05-24 09:14:39

国企程序员程序员
点赞
收藏

51CTO技术栈公众号