`
xwangquan
  • 浏览: 7655 次
  • 性别: Icon_minigender_1
  • 来自: 湖北
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java spymemcached bug?

阅读更多

 

        这段时间在重温 java 通讯这块,又重看了一下几个通讯框架,比如 mina,quikserver. whalin memcached,spymemcached 结构不是我的主要研究点.我主要是看他们对通讯那块(具体connet,read,write)的处理!

        我在调试spymemcached的时候发现一个奇怪的问题.当使用MemcachedClient 与server建立一个连接,连接代码如下:           

 

            MemcachedClient memcachedClient = new MemcachedClient(new InetSocketAddress("192.168.1.111", 11211));
            long time = System.currentTimeMillis();
            Future<Boolean> future = memcachedClient.set("xwagnquan", 3600, time);

 

        程序启动后,用CurrPorts( http://www.nirsoft.net/utils/cports.html ,windows下一个小工具,用于查看和管理tcp/udp的连接状况,比netstat 方便)查看客户端的连接状况, 如下图:

 

        很明显 ,进程编号为6032,本地端口为24550,远程端口为192.168.1.111:11211的是我与server建立的连接,使用24550语192.168.1.111server通讯。

       问题1,剩下的那几个java通道分别连接到111的其他端口,在java nio中这些通道是做什么用的,有什么意义?在基于mina的通讯程序中,我与server建立一个连接后,只发现一个类似6032这的通道!

       接着,我关掉一个与24550有关的java通道,发现spymemcache 后台疯狂的打出

2009-04-23 17:40:29.171 INFO net.spy.memcached.MemcachedConnection:  sun.nio.ch.SelectionKeyImpl@1884174 has a ready op, handling IO
2009-04-23 17:40:29.171 INFO net.spy.memcached.MemcachedConnection:  sun.nio.ch.SelectionKeyImpl@1884174 has 1, interested in 0
2009-04-23 17:40:29.171 INFO net.spy.memcached.MemcachedConnection:  sun.nio.ch.SelectionKeyImpl@1884174 has a ready op, handling IO
2009-04-23 17:40:29.171 INFO net.spy.memcached.MemcachedConnection:  sun.nio.ch.SelectionKeyImpl@1884174 has 1, interested in 0
2009-04-23 17:40:29.171 INFO net.spy.memcached.MemcachedConnection:  sun.nio.ch.SelectionKeyImpl@1884174 has a ready op, handling IO
2009-04-23 17:40:29.171 INFO net.spy.memcached.MemcachedConnection:  sun.nio.ch.SelectionKeyImpl@1884174 has 1, interested in 0
2009-04-23 17:40:29.171 INFO net.spy.memcached.MemcachedConnection:  sun.nio.ch.SelectionKeyImpl@1884174 has a ready op, handling IO
2009-04-23 17:40:29.171 INFO net.spy.memcached.MemcachedConnection:  sun.nio.ch.SelectionKeyImpl@1884174 has 1, interested in 0

 

      这类信息!导致cpu使用很高,后更跟踪sypmemcached源代码发现在MemcachedConnection这个类中的handleIO()方法中有如下逻辑,

  

if(selectedKeys.isEmpty() && !shutDown) {
			getLogger().debug("No selectors ready, interrupted: "
					+ Thread.interrupted());
			if(++emptySelects > DOUBLE_CHECK_EMPTY) {
				for (SelectionKey sk : selector.keys()) {
					getLogger().info("%s has %s, interested in %s",
							sk, sk.readyOps(), sk.interestOps());
					if(sk.readyOps() != 0) {
						getLogger().info("%s has a ready op, handling IO", sk);
						handleIO(sk);
					} else {
						lostConnection((MemcachedNode)sk.attachment());
					}
				}
				assert emptySelects < EXCESSIVE_EMPTY
					: "Too many empty selects";
			}

     

     这块逻辑我没看清楚他的作用!

     以上暴漏出一个严重的问题,如果一个java通道被外在因素强制关闭,会导致以上逻辑反复的执行,导致cpu使用率彪到极限,且一直处于最高峰!

     是不是这个框架有问题呢? 以后选择memcached java client 是不是要注意一下呢? 

     请熟悉spymemcached 和java socket 的哥们帮忙解释一下,谢谢!

 

  • 大小: 15.1 KB
2
0
分享到:
评论

相关推荐

    JAVA代码BUG分析

    在编程世界中,Java语言以其跨平台性和稳定性深受开发者喜爱,但即使是经验丰富的程序员,也难免会在编写代码时遇到各种各样的错误,也就是我们常说的“BUG”。本篇将聚焦于"JAVA代码BUG分析"这一主题,深入探讨常见...

    基于java软件bug管理系统设计与实现.docx

    基于java软件bug管理系统设计与实现

    java框架bug处理大全

    java 框架 bug处理 大全

    java java查bug 查bug bug 查错 源码

    "查bug"和"查错"是每个Java开发者必备的技能,而深入理解源码则能帮助我们更好地定位和解决问题。 在Java中,查bug通常涉及以下几个关键步骤: 1. **复现问题**:首先,我们需要在开发环境中重现bug,这包括了理解...

    JAVA.BUG模式详解

    在Java编程中,"BUG模式"通常指的是程序员在编写代码时容易犯的一些常见错误或陷阱,这些错误可能导致程序运行不正常、性能下降甚至系统崩溃。理解并避免这些BUG模式是提高Java程序质量和效率的关键。本篇文章将深入...

    大家有没有发现VS2010——MFC的对话框有个BUG?

    大家有没有发现VS2010——MFC的对话框有个BUG?就是当对话框失去焦点后,外框的颜色没有变灰!

    java的BUG集锦以及初学者上级练习素材全套.zip

    Java编程语言以其强大的跨平台能力和丰富的库支持深受程序员喜爱,但对于初学者来说,理解并解决各种BUG是学习过程中的一大挑战。这份"java的BUG集锦以及初学者上级练习素材全套.zip"提供了丰富的资源,旨在帮助新手...

    tip之bug?

    tip之bug 帐号对应信息显示出错

    java开源的bug管理系统.rar

    Java开源的Bug管理系统是一款基于Java技术构建的问题跟踪与解决工具,它主要用于协助软件开发团队进行有效的缺陷管理和项目任务控制。这个系统通常包含了多种功能模块,如问题报告、故障分类、优先级设定、状态追踪...

    java Bug模式详解

    java Bug模式详解

    基于JAVA语言开发的bug管理系统

    《基于JAVA语言开发的Bug管理系统详解》 在软件开发过程中,Bug管理是至关重要的环节,它关乎着软件质量与用户体验。本文将深入探讨基于JAVA语言开发的Bug管理系统,旨在为开发者提供一个全面的理解和实践指南。 ...

    java bug系统

    【Java Bug系统】是一个专为跟踪和管理软件开发过程中出现的错误或问题的系统,它通常用于记录、分类、优先级排序以及修复这些bug。在Java编程语言中,开发这样的系统意味着利用Java的强大特性和丰富的类库来实现...

    Java Bug模式详解 pdf版

    《Java Bug模式详解》这本书是面向那些已经具备Java编程基础的开发者,旨在帮助他们更好地理解和解决在编程过程中遇到的各种错误和异常,提升代码质量和维护效率。书中深入剖析了Java编程中常见的bug模式,通过实例...

    Java白板Bug新版

    "Java白板Bug新版"可能指的是一个专门针对Java编程中的错误或问题的讨论,或者是某个人或团队发布的关于Java新版本中出现的特定Bug的分析与解决方案。 在编程领域,"Bug"是程序员们常遇到的问题,它指的是软件代码...

    Java Bug模式详解.rar

    Java Bug模式详解主要涵盖的是Java编程中常见的错误和陷阱,这些错误往往会导致程序运行异常或者性能下降。在软件开发过程中,理解和避免这些Bug模式对于提高代码质量和效率至关重要。本资源包含一本PDF电子书《Java...

    java问题管理 BUG管理 任务管理 项目管理系统.rar

    在IT行业中,问题管理、BUG管理、任务管理和项目管理是软件开发流程中的核心环节,尤其在Java编程领域,这些管理工具和技术的应用对于提高团队效率、保证产品质量至关重要。本压缩包文件"java问题管理 BUG管理 任务...

    java.bug模式

    在编程世界中,Java语言以其稳定性和强大的生态系统深受开发者喜爱,但即使是这样,错误和bug仍然难以避免。"java.bug模式"这个主题主要聚焦于Java编程中的常见问题及其调试技术,旨在帮助开发者提高问题定位和修复...

    使用Java编写不含任何BUG的计算器

    在编程领域,构建一个无bug的程序是一项挑战,...总的来说,创建一个无bug的Java计算器需要对Java语言有深入的理解,包括类、方法、异常处理以及数值计算。同时,良好的编程习惯和严谨的测试策略是确保代码质量的关键。

    java 隐性bug查找

    可作为myeclipse的插件加入,可以检测java代码隐性的bug

Global site tag (gtag.js) - Google Analytics