新疆软件开发

本站首页 软件开发 成功案例 公司新闻 公司简介 客服中心 软件技术 网站建设
  您现在的位置: 新疆二域软件开发公司 >> Java技术 >> 文章正文

java多线程SOCKET程序的问题

      去年的一个项目中,我设计了一个多线程的UDP通讯程式,由我方一台主机,分别对应四地发送接收数据包。
在生产环境已经非常稳健的运行了1年。
最近,随着业务的增加,连接的远端增加到了12个,也就是一个IP向12个IP发送接收数据包。
我在主线程中,管理这12个独立的通讯线程,互不干扰,由于服务器是2U4核,所以该程式的设计具有一定可伸缩性。
但是,最近维护人员告诉,发现会发生某地业务停顿。一检查,线程exception terminate。居然报的是:port already bind这个最常见的exception。但是在console里面,重启这个线程,它又可以正常启动,并稳定的运行。而且它每次发生的几率很随机,有时候死掉1个,有时死掉3个,或者全部正常。
去年,该程式做过多次压力测试,并没发现这个问题,现在唯一导致它发生的原因就是线程增加了3倍。
  仔细分析,发现多线程的启动方式,是在spring里面进行管理和注册jmx,每个线程都事先配置成mbean。启动的时候,注入一个map里,再循环启动。而udp通讯的方式是,随机的由OS分配端口,会不会是线程的request太快,而OS没有lock port cache的strategy,我想到这里于是在循环启动bean的方法里面,加了一个Thread.sleep(100)。再次测试,解决。
最后,我认为os在分配随机端口的时候,可能没有锁定机制,如果线程的request是高conconrent,就有可能出现重叠,而引发port lready bind 这个最简单的错误。要解决这个问题,第一就是尽量延长启动间隔,尤其是多路并发的server上,第二,人为的控制port的分配。
作者:未知 | 文章来源:未知 | 更新时间:2008-1-15 16:39:39

  • 上一篇文章:

  • 下一篇文章:

  • 相关文章:
    JAVA开发的6个实践的例子
    JAVA中的抽象类型的一些概念
    java语言开发程序中的几个例子大家看看
    了解java开发语言在软件开发中的几个误区
    如何才能使用Java实现内部领域的特定语言
    Java开发学习小心使用Date以及Time类
    sun最近修补了一部分java的安全补丁
    Java程序员应该了解那些开源协议
    java性能优化的一些见解
    解析c#语言和java语言最相似的地方
    软件技术
    · 开发语言
    · Java技术
    · .Net技术
    · 数据库开发
    最新文章  
    ·j2se 嵌入式脚本抓取引擎
    ·JAVA开发的6个实践的例子
    ·JBuilder7 / Weblogic7开发
    ·JAVA中的抽象类型的一些概
    ·java语言开发程序中的几个
    ·了解java开发语言在软件开
    ·如何才能使用Java实现内部
    ·Java开发学习小心使用Date
    ·Java程序员应该了解那些开
    ·java性能优化的一些见解
    ·介绍JDK5.0一些collection
    ·基础学习:java中使用存储
    ·解析c#语言和java语言最相
    ·Java语言学习:jAVA中 的多
    ·Java是不是应该增加新特性
    关于我们 | 软件开发 | 下载试用 | 客服中心 | 联系我们 | 友情链接 | 网站地图 | 新疆电子地图 | RSS订阅
    版权所有 © 2016 新疆二域软件开发网 www.k8w.net All Rights Reserved 新ICP备14003571号
    新疆软件开发总机:0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆乌鲁木齐北京中路华联大厦A-5C 邮编:830000