100万并发连接服务器笔记之Java Netty处理1M连接会怎么样

100万并发连接服务器笔记之Java Netty处理1M连接会怎么样,第1张

100万并发连接服务器笔记之Java Netty处理1M连接的预测如下:

1、不说Netty会如何,服务器都有可能直接崩溃掉。

2、按平均每链接传输数据1K,100W链接大概数据量会在1G左右,G级服务器网卡也受不了的。

3、在网络编程中对单机来讲,成功解决了C10K的问题,这种M级别的链接,可能暂时解决不了。

4、对于如此大的并发,一般都是通过负载均衡的方式进行处理,如新浪微博,同时在线100W以上,通过约100多个节点处理,每个节点也就才10000并发左右。

总结如下:

1、JVM需要提前指定堆大小,相比Erlang/C,这可能是个麻烦。

2、GC(垃圾回收),需要持续不断的根据日志、JVM堆栈信息、运行时情况进行JVM参数微调。

3、设置一个最大连接目标,多次测试达到顶峰,然后释放所有连接,反复观察内存占用,获得一个较为合适的系统运行内存值。

4、Eclipse Memory Analyzer结合jmap导出堆栈DUMP文件,分析内存泄漏,还是很方便的。

5、想修改运行时内容,或者称之为热加载,默认不可能。

主要逻辑 :

使用netty实现长连接,主要靠心跳来维持服务器端客户端连接。

主要的实现逻辑如下:

服务器端 :(HeartBeatRespHandler)

1, 服务器在网络空闲 *** 作一定时间后,服务端失败心跳计数器加1。

2, 如果收到客户端的ping心跳包,则清零失败心跳计数器,如果连续n次未收到客户端的ping心跳包,则关闭链路,释放资源,等待客户端重连。

客户端 :(HeartBeatReqHandler)

1, 客户端网络空闲在一定时间内没有进行写 *** 作时,则发送一个ping心跳包。

2, 如果服务器端未在发送下一个心跳包之前回复pong心跳应答包,则失败心跳计数器加1。

3, 如果客户端连续发送n(此处根据具体业务进行定义)次ping心跳包,服务器端均未回复pong心跳应答包,则客户端断开连接,间隔一定时间进行重连 *** 作,直至连接服务器成功。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9898188.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存