Java NIO 并发测试 connection 无法建立

Inthend 发布于 2014/12/16 00:41
阅读 329
收藏 0

解读下一代网络:算力网络正从理想照进现实!>>>

各位好,

    最近在做nio server,遇到点问题请教下大伙。在此先谢过。

    硬件环境:server 环境是jdk6 nio,centos,网速2M;  client客户端mac,网速10M

    软件环境:单纯的java nio,没有使用什么socket framework。实现方式是主线程select,select后remove key,线程池10个core thread对key做处理,线程池queueCap 设置到10000,key处理线程中在将事件注册到主线程中。

    目前遇到的问题是:当我客户端同时使用过多的线程 连接到server(>800,有时候小于也会出问题)时,会发现客户端connect 成功,但是服务器端accept不到。

    我用wireshark抓包看了下三次tcp 握手过程:

        1、client-》syn》server  显示正常(有重发现象)

        2、server-》syn ack 》client 显示正常

        3、client-》ack 

    之后当client发送数据给server时,server有时会重新发送syn ack或者发送reset... 我理解就是握手不成功,连接未建立的意思吧?

    我的问题是:在现有的结构下,有什么方案可以改善server的响应能力? 不知道问题出在哪里,还请有经验的朋友指点下,谢谢。 

    ps. 如果是单机centos linux 自己访问自己的话,2000以上也会出现类似的问题。    

以下是问题补充:

@Inthend:先关掉问题。发现windows client 问题就不见了。感谢各位 (2014/12/16 15:59)
@Inthend:之后发现问题或者有什么想法在来交流... (2014/12/16 16:04)
加载中
0
duty
duty
jdk的nio实现,本身就有bug。。。
Inthend
Inthend
谢谢提醒,我搜索了下,好像不太好哈。
0
吐槽的达达仔
吐槽的达达仔
楼主贴个代码吧。。
0
朱宏青
朱宏青
推荐你还是用netty吧 自己折腾nio 容易掉坑里
Inthend
Inthend
回复 @朱宏青 : 嗯,之前也知道这个比较N,但是我的陋习就是不太喜欢用framework,所以就自己鼓捣。现在有问题了。。哈哈。 不过我自己的server jdk是7,公司的是6。也许是代码问题。先换过再试试。
朱宏青
朱宏青
回复 @Inthend : 放心 netty已经大规模的使用在生产环境上 比一般人写出来的nio框架强太多了!另外推荐用高版本jdk,低于7版本的jdk可能会出现意想不到的bug.
Inthend
Inthend
因为不太喜欢用框架,所以就先自己选择了jdk nio。经大家提醒,可能也许是本身的bug,我换netty试试看。
0
Xsank
Xsank
这个最佳答案真是醉了
Inthend
Inthend
指个方向就好,很重要。
返回顶部
顶部