1.笔者本人现在在一家创业公司担当整个平台架构的角色,而这家公司是做一移动互联网相关的一些应用产品,由其现在正在和中国最大的互联网公司之一进行合作,负责该互联网公司的手机终端的长连接推送服务,所以有一些总结特在此和大家分享一下。
2.下面这篇文章是笔者在几个月前做的一篇长连接的总结,所以可能写的不是非常严谨,特给javaer们进行一些参考即可,有如下几个数据和大家一起分享下:
1) 单JVM实现了50W以上长连接,每秒消息处理“Hello Word”和心跳包6W次
2)该长连接,不仅实现了手机终端的摸拟,而且该框架也是一个成熟的RPC框架,已经在笔者所在的公司使用。比阿里巴巴开源版本出来的"dubbo"性能要高,而且更节省带宽,大家可以测试比较一下。
3)因为netty支持的长连接,每条连接占有用内存是5K,笔者经过包装之后每条连接占用5.3K, 每条长连接系统要占用8K;所以大家可以计算一下每条长连接一共要消耗的系统内存量。
4)通过“3)”我们可以计算,50W长连接需要多少内存量(JVM):500000*5.3K=2650000K=2.53G,50W长连接需要多少内存量(OS):500000*8K=3.8G
也就是说,50W长连接的话,大约需要总占用系统10G的内存空间(当然这是保守值,也希望大家多测试测试给出更多的一些数据)
3.好了,说了这么多,看看笔者的一些测试数据吧(笔者只是把几个月前的测试邮件内容发出,因为某些原因笔者不能发出现在公司正在使用的完全代码实现)
1)如果要支持这么多的长连接,一定要修改一下系统的一些内核参数,如下:
- <span>vi /etc/sysctl.conf
- net.ipv4.tcp_max_syn_backlog = 65536
- net.core.netdev_max_backlog = 32768
- net.core.somaxconn = 32768
- net.core.wmem_default = 8388608
- net.core.rmem_default = 8388608
- net.core.rmem_max = 16777216
- net.core.wmem_max = 16777216
- net.ipv4.tcp_timestamps = 0
- net.ipv4.tcp_synack_retries = 2
- net.ipv4.tcp_syn_retries = 2
- net.ipv4.tcp_tw_recycle = 1
- #net.ipv4.tcp_tw_len = 1
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_mem = 94500000 915000000 927000000
- net.ipv4.tcp_max_orphans = 3276800
- #net.ipv4.tcp_fin_timeout = 30
- #net.ipv4.tcp_keepalive_time = 120
- net.ipv4.ip_local_port_range = 1024 65535
- /sbin/sysctl -p
- 最后个命令是让配置生效的。
- vi /etc/security/limits.conf
- 添加
- * - nofile 1006154</span>
注:a.因为移动终端经常会因为网络问题断开,所以要修改内核参数支持连接断开后快速回收
b.OS虽然默认TCP的缓冲内存已经足够大,但是因为系统要支持很多的长连接,所以缓冲内存还需要调整,要不然会发生丢包情况(这个也是笔者当时和58同城的资深VP聊天的时候了解并学习到的)
c.文件句柄数要加大,因为OS默认支持的长连接数量比较小
2)下面是测试的邮件正文
写道
如果Server端默认1分钟没有收到消息(包括心跳),则断开连接,可配间隔时间。
同理,如果Client端没有Server推过来的消息(包括心跳),则断开连接,可配间隔时间。
当然,如果没有消息,心跳包也是可以Client <--> Server互发的。如果没有消息,心跳就会互发,为了保证长连接不断。如果要是在接收方没有消息过来,则认为连接断了。之前设计这个的时候,就是考虑到了手机端的长连接的各种应用场景。
2. 每个登录用户没有用户session,不过有这个接口,可以每个连接可以添加一个attchment,可以跟据连接绑定信息。
测试的时候没有给attchment加信息。
其实真的不是为了代替他的方案,当时设计的时候就是为了RPC和手机服务端长连接设计的。
用户session信息比较占用内存,我是建议用户session信息放在堆外,这样不影响JVM。
3. 现在内存表现是用的CMS回收策略,所以没有出现full gc回收停顿的情况。但是因为netty的长连接本身就占了5K,而且我们这边又加了一些扩展信息,所以现在一个连接占了5.3K。
4. 为什么说现在超过50W了,是因为现在内存上限设成6G了,然后又进行了50W以上的长连接和每秒60000以上的消息发送(Hello Word)。
年轻代和老年代回收的时间都在0.4秒左右,所以对应用没有影响才敢说50W长连接了。
(注:年轻代回收,其实整个应用会停的,老年代的 full gc也是整个应用会停的;不过gc.log我看了,在0.4秒左右,所以没有影响应用)
(其实理论上还可以加内存,不过没有经过压力测试也没有时间弄了,没有测试机测试一回太累了,不过至少保证50W长连接没有啥问题)
(我估计也差不多了是上限了,应用内存回收已经占了0.4秒了,再加大如果回收时间占有的太长也不好)
5. 之前为什么说加到6G测试后,不行。是因为我发现jvm的年轻代不能开太大,好像年轻代开的太大会影响整个应用的停顿时间。所以这次是把年轻代保持不变,heap推放大到6G,所就是说多出来的2G空间给老年代了。而长连接正好在老年代保存,所以新加的2G给长连接正好把长连接推到了50W长连接。而且还有1G以上的空闲空间,而且老年代的full gc也控制在了0.4秒,我感觉比例正好。
下面是测试数据:
1. 同时在线人数 : 508691
2. JVM 参数配置:
3. 资源使用情况:
5. 每秒消息数:60000msg/s
6. gc.log 信息如下:
ParNew :是新生代的回收时间,会让整个应用停止,real 是真实的应用停止时间:0.4x
GC[YG occupancy] 这一段是老年代full gc :会让整个应用停止,real 是真实时间,0.42
因为gc 新年代和老年代收回不频繁,所以对应用没有影响。内存我也其实也不想再加了,在60000 个消息并发和50W 心跳包的情况下能做到这个效果,我感觉不错了。
刚才问了手机QQ 的长连接,这前他们是15~20W 长连接一台,现在新的架构也就能做35~40W ,我感觉现在应该行了。
该长连接测试用例,笔者是用summercool-hsf开源框架(笔者的另一个开源的RPC框架)的基础上实现的。笔者正在用grizzly实现另一个手机终端长连接版本,因为grizzly更加节省内存,能支持更多的长连接数量,虽然性能可能不会达到netty,但是对不是高压力该问,但是对长连接数量有非常高要求的应用,grizzly还是非常适合的。笔者因为时间的关系,不再列出grizzly的详细测试数据,后面的章节会继续给出,请大家关注。
summercool-hsf框架地址(已经在某些公司的大型应用成熟使用1年时间):http://code.google.com/p/summercool-hsf/
相关推荐
总的来说,PDA通过WebService连接Oracle数据库是一种常见的解决方案,它使得移动设备可以便捷地访问后台数据资源,提高了工作效率。通过深入理解和实践这个示例,开发者能够掌握远程数据库访问的技术,为未来开发更...
《大型工厂远程网络监控设计方案实例与分析借鉴》的文档主要探讨了如何为大型工厂,以深圳富士康为例,设计并实施一套高效、稳定的远程网络监控系统。该系统旨在全面管理和监控工厂的生产及生活状况,包括移动检测、...
远程访问有三种可选的服务类型:专线连接、电路交换和包交换,企业用户可以根据所需带宽、本地服务可用性、花费等因素综合考虑,选择一种适合企业自身需要的广域网接入方案。 在本工程案例设计中,分别采用专线连接...
随着移动互联网技术的飞速发展,移动设备已经成为人们日常生活中不可或缺的一部分。基于此背景,本文将深入探讨MQTT协议及其在移动推送领域的应用,重点讲解MQTT原理、优势以及如何设计一套高效的移动推送方案。 ##...
《Visio信息化设计在智慧城市建筑中的应用——以“上洋移动录播综合解决方案”为例》 Visio,作为Microsoft Office套件中的一款图形设计软件,是进行信息化设计的重要工具,尤其在描绘智慧城市建筑的蓝图中发挥着...
【大型工厂远程网络监控设计方案实例与分析】 大型工厂的远程网络监控系统是现代工业管理的重要组成部分,以富士康观澜新厂为例,其网络视频监控项目旨在提升生产与生活的全方位管理效率。监控系统需要能够实时、...
大学校园网解决方案是针对高等教育机构信息化建设的一种全面规划,旨在提供高效、安全、可靠的网络环境,以满足教学、科研、管理以及师生日常活动的需求。以下是对这个解决方案的详细解读: 首先,当前的网络建设...
标题为“移动通信分布式皮基站设计方案.pdf”,描述为“#资源达人分享计划#”,而标签则包括“分布式、分布式系统、分布式开发、参考文献、专业指导”。文件的【部分内容】涉及了通信技术的专业术语和参数,但由于...
在实际的“系统管理与维护编程实例”中,可能还会涉及到文件和目录的创建、复制、移动、删除,以及文件流的读写操作。比如,File类和Directory类提供了大量的静态方法用于文件和目录的基本操作,而FileStream类则...
在工业互联网体系架构中,网络切片主要作用于工厂外部网络,如互联网、移动网络和专用网络,同时也能应用于智能工厂内部网络,保障实时性、可靠性的数据传输和系统交互。 总之,面向服务可保证的工业互联网网络...
ADO提供了高效、轻量级的解决方案,使得开发者能够快速地构建数据驱动的应用程序。 1. **ADO基础概念** - **Connection对象**:这是与数据源建立连接的关键对象,用于打开和关闭连接,执行SQL命令。 - **Command...
移动计算的关键在于,它允许用户在任何时间、任何地点进行数据访问和处理,这主要依赖于移动设备与网络之间的无线连接。在移动计算环境中,应用程序需要处理网络连接的不稳定性和延迟问题,同时还要考虑到设备的电池...
在这个情况下,它可能会提供有关浏览器实例的详细安装步骤,使用须知,或者开发者可能遇到的问题及其解决方案。 "BREW_Browser_v2.0.0"这个文件名暗示了这是一个版本号为2.0.0的浏览器应用,这可能意味着它相比于...
实例95 参数不确定(可变长参数) 249 实例96 方法改变(协变式返回类型) 251 实例97 静态导入 252 实例98 动物搭配(泛型) 253 实例99 人员信息(枚举类型) 256 实例100 printf()用法 260 实例101 使用...
每个实例都包含硬件连接、程序编写、调试技巧以及可能出现的问题及解决方案。通过这些实例,学习者不仅可以掌握单片机的基本操作,还能了解到实际工程中可能遇到的各种问题和解决方法。此外,对于每个实例,都可能...
在电子商务中,安全是至关重要的,移动Agent提供了一种新的解决方案。移动Agent能够在网络中自主地从一个服务器迁移到另一个服务器,进行数据交换和处理。这样的机制可以增强交易的隐私性和完整性,因为Agent可以在...
《中国移动在线业务技术方案》是针对中国移动通信集团的娱乐音在线业务制定的一份技术规范,旨在确保服务质量、网络稳定性和用户体验。这份文档是征求意见稿,版本号为1.0.0,由中国移动通信集团公司发布并实施。...
在本压缩包文件“visio信息化设计实例有线网络部署-网络演示场景_慢速移动.zip”中,主要包含了一个名为“网络演示场景_慢速移动.vsd”的Visio文件,该文件着重展示了如何利用Visio进行信息化设计,特别是在智慧城市...
"可移动式拼装房屋连接节点.pdf"这个文件很可能是关于这个主题的详细研究报告或者设计手册,涵盖了节点设计原理、实例分析、施工工艺等内容,对于从事电信设备安装、建筑结构设计或者相关领域的工程师来说,是一份...