`
chenchao051
  • 浏览: 137733 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ZK Timeout再讨论

阅读更多

http://crazyjvm.iteye.com/blog/1693757 文中提到相关超时问题,但是又出现了一个问题,我把min和max都设置成了180000,但是仍然出现了以下的异常信息:

Client session timed out, have not heard from server in 154339ms for sessionid 0x13a3f7732340003 ...
Client session timed out, have not heard from server in 167805ms for sessionid 0x13a3f7732340000 ...

 

 

我们循着这个异常定位到:ClientCnxn.java

又看到zk存在如下信息:

Established session 0x13a3f773235011b with negotiated timeout 180000 for client /x.x.x.x:49702

这说明我们的配置的确起效果了。那为何还会超时呢,下面几段代码可能会解答这个问题:

异常信息在这里抛出:

if (to <= 0) {
    throw new SessionTimeoutException(
           "Client session timed out, have not heard from server in "
             + idleRecv + "ms"
             + " for sessionid 0x"
             + Long.toHexString(sessionId));
}

 而这段代码在:

 /**
     * This class services the outgoing request queue and generates the heart
     * beats. It also spawns the ReadThread.
     */
class SendThread extends Thread {
   //....
}

 我们可以看到这个类负责维护发信息并且维护心跳,接着往下看这个类中的关键代码,

readTimeout = negotiatedSessionTimeout * 2 / 3;  //我们设置了180s, 那这个值就是120s
connectTimeout = negotiatedSessionTimeout / serverAddrs.size();

 

 long now = System.currentTimeMillis();
        long lastHeard = now;
        long lastSend = now;
        while (zooKeeper.state.isAlive()) {
             try {
                    if (sockKey == null) {
                        // don't re-establish connection if we are closing
                        if (closing) {
                            break;
                        }
                        startConnect();
                        lastSend = now;
                        lastHeard = now;
                    }
                    int idleRecv = (int) (now - lastHeard);
                    int idleSend = (int) (now - lastSend);
                    int to = readTimeout - idleRecv;  //答案就在这行,readTimeout,上面提到120s
                    if (zooKeeper.state != States.CONNECTED) {
                        to = connectTimeout - idleRecv;
                    }
                    if (to <= 0) {
                        throw new SessionTimeoutException(
                                "Client session timed out, have not heard from server in "
                                + idleRecv + "ms"
                                + " for sessionid 0x"
                                + Long.toHexString(sessionId));
                    }
          

假如我没有分析错的话,那么就是这个原因了。

此外lease和rpc也会可能超时,这个等下次再简单结合代码具体谈。

分享到:
评论
2 楼 HowKeyond 2015-01-07  
补充,我代码中监听了session失效事件,并做了重连,但重连要几秒才能连得上,而我们的系统并发频率较大,在重连的过程中有上百个请求找不到这个模块请求失败了,加上这个session失效出现的频率很高,影响很大。
1 楼 HowKeyond 2015-01-07  
请问这一般是什么原因引起的呢?怎么解决?我被这个问题困扰几个星期了,跟踪日志+源代码分析也是找到这里出的异常,但不知是什么原因引起的,它跟zookeeper服务器之间保持的是长连接,给zookeeper发个心跳再读取返回信息理论上应该很快,不可能要几秒甚至上百秒的呀。
期待您的答复,谢谢!

相关推荐

    zkframework Eclipse插件 zkstudio ZK Studio

    **ZK Framework与Eclipse插件ZK Studio详解** ZK Framework是一款强大的Java Web开发框架,专注于构建富客户端用户界面。它提供了一种基于事件驱动和组件模型的编程方式,使得开发者无需处理复杂的JavaScript和HTML...

    ZK32-1_library_zk_thinkkrz_zk32+9999zk.com_

    ZK32通常指的是ZK Software公司的ZK TEchnology Kernel 32,这是一个专为开发生物识别设备(如指纹识别)应用的SDK(Software Development Kit)。Thinkkrz可能是ZK32的一个版本或者与之相关的开发团队或项目名,而...

    ZK+spring+hibernate的整合

    《ZK+Spring+Hibernate整合详解》 ZK、Spring和Hibernate是Java开发中的三大重要框架,它们分别在用户界面、依赖注入与事务管理、持久层操作方面发挥着关键作用。将这三者进行整合,可以构建出高效、稳定且易于维护...

    zk入门.web框架

    ZK 是一个基于 Java 的轻量级Web框架,专门用于构建富客户端的Web应用程序。它提供了丰富的用户界面组件和事件处理机制,使得开发者能够轻松创建交互式的Web应用。本篇文章将深入探讨ZK框架的基本概念、开发环境的...

    ZK安装 ZK入门 开发 讲解 共3个pdf

    ZK,全称为ZK Framework,...通过这三个PDF文档的学习,你可以系统地掌握ZK框架,从安装环境到实际开发,再到高级特性的运用,逐步成为一名熟练的ZK开发者。记得理论结合实践,不断尝试和探索,才能真正掌握ZK的魅力。

    zk框架zk7api

    zk后台api很全的,对于学习ZK很有用的。

    ZK资料学习zk框架的助手

    ZK,全称为ZooKeeper,是由Apache软件基金会开发的一个分布式协调服务框架,它为分布式应用提供一致性服务,包括命名服务、配置管理、集群管理、分布式锁等。本资料包是针对ZK框架的学习资源,旨在帮助用户深入理解...

    zk开发手册和注意事项

    ZK开发手册和注意事项 ZK是一个基于Java的开源Ajax Web应用框架,它允许开发者创建富互联网应用(RIA)。ZK框架基于服务器端技术,其特性在于能够在不需要AJAX和JavaScript编程的情况下,提供强大的前端组件和应用...

    ZK4500SDK包 ZK4500、中控指纹仪、SDK开发包带各种语言的demo

    《ZK4500SDK:中控指纹仪的开发与应用》 在信息技术日新月异的时代,生物识别技术已经广泛应用于各个领域,其中指纹识别作为一种安全且便捷的身份验证方式,尤其受到青睐。ZK4500SDK是中控科技针对其ZK4500指纹仪...

    zkstudio_2.0.1_indigo

    【标题】"zkstudio_2.0.1_indigo" 是一个特定版本的ZK Studio,它是基于Eclipse Indigo开发的一款专为ZK框架设计的集成开发环境(IDE)。ZK Studio是ZK框架的官方插件,它提供了一系列便利工具,用于提升ZK应用的...

    zk-bin-6.5.0.zip

    zk-6.5.0.zip ZK 6.5.0 Sep 12, 2012 * Features ZK-447: The file upload allows users to drag and drop local files (HTML5) ZK-1241: ZK Client Widget support swipe event for tablet/mobile device ZK-...

    zk studio eclipse plugin

    ZK Studio Eclipse Plugin是一款专为ZK框架开发者设计的集成开发环境插件。ZK框架是一种基于组件模型的Java Web应用框架,它简化了用户界面的构建和维护,提供了丰富的客户端组件和事件处理机制,同时支持服务器端的...

    ZK框架:Ajax开发实战

    由于提供的文件信息中,有关股票知识的部分占据了大部分内容,而与标题“ZK框架:Ajax开发实战”相关的内容并未在文件中明确出现,因此无法直接从给定的文件信息中生成与ZK框架和Ajax开发相关的内容。不过,我将基于...

    ZK所需jar包

    在IT行业中,ZK是一个流行的Java桌面应用框架,它允许开发者构建富客户端用户界面而无需深入JavaScript编程。ZK框架提供了MVC模式的组件化开发,使得前后端分离变得更加简单。这里的"ZK所需jar包"指的是为了在项目中...

    zk框架学习中文手册

    CodeFans网是一个聚集了大量程序员的平台,可能会有关于ZK框架的讨论和资源分享,对于深入理解和应用ZK框架具有一定的帮助。 总的来说,ZK框架以其高效、易用和强大的功能,成为Java Web开发领域中的一个重要选择。...

    zk 6 学习资料

    ZK 6 学习资料是一套全面的资源集合,专为想要深入理解和掌握ZK 6框架的开发者设计。ZK是一个Java为基础的用户界面(UI)框架,它简化了构建富互联网应用程序(RIA)的过程,特别是对于企业级应用。这个压缩包包含了...

    ZK 6.5.0版本全面文档,供专业开发,学习 zk-mvvm-book ,ZK 8.0.0 Client-side Reference

    ZK 8.0.0端参考 ZK 8.0.0组件开发的必需品 ZK 8.0.0组件引用 ZK 8.0.0配置参考 ZK 8.0.0开发人员的参考 ZK 8.0.0风格定制指南 ZK 8.0.0 ZUML参考 zk-mvvm-book

    ZK框架开发手册

    手册中详细讨论了命令和通知的绑定,以及如何使用EL表达式来进行数据绑定。 ZK框架还支持使用注解来简化开发过程,包括在ZUML和Java代码中使用注解。开发者可以在组件定义中添加注解来增强组件的功能,同时也可以...

    zk主题生成器

    ZK主题生成器是一款专为ZK框架设计的工具,旨在帮助开发者轻松创建和定制ZK应用的主题,而无需深入理解复杂的CSS(层叠样式表)语言。ZK是一个流行的Java AJAX框架,它允许开发人员构建富客户端Web应用程序,提供...

Global site tag (gtag.js) - Google Analytics