看这篇小分享前请务必先看看这个:http://blog.csdn.net/cenwenchu79/archive/2011/05/27/6450427.aspx
PipeComet这个支持长连接,异步请求事件处理框架做了测试也快有5天了,这里做一个简单的总结,但这个文档中的数字不能作为最终容量的定论,后续还会在优化后有进一步的测试。同时这个文档更倾向于分享过程中的遇到的一些问题,可以避免走一样的弯路。
测试环境:
1台部署了Jetty Web容器作为PipeComet服务端。
2台windows测试机部署了两个LoadRunner,作为压力测试客户端。(一个用于建立大量长连接,一个用于产生http请求模拟外部事件激发数据片段下发)
服务端配置如下:
Xen虚拟机,5核(2.40 GHz),8G内存。
Jetty 7.1.6版本,jdk 1.6.0_25
JVM配置:-Xms7g -Xmx7g -XX:PermSize=96m -XX:MaxPermSize=256m -Xmn3g
Jetty配置:
<Set name="ThreadPool">
<!-- Default queued blocking threadpool -->
<New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
<Set name="minThreads">400</Set>//最小和最大线程池设置的都有一点大,后面大致说一下
<Set name="maxThreads">800</Set>
</New>
</Set>
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<Set name="host"><Property name="jetty.host" /></Set>
<Set name="port"><Property name="jetty.port" default="8080"/></Set>
<Set name="maxIdleTime">3600000</Set> //无数据传输的连接保持多久,单位毫秒
<Set name="Acceptors">4</Set>
<Set name="statsOn">false</Set>
……
</New>
</Arg>
</Call>
测试场景描述:
1.启动服务端,并建立有Condition模式的管道配置。
2.压力测试机A通过LoadRunner并发启动N个vuser,与服务端建立N个长连接会话,服务端建立N个事件挂起当前多个请求,等待外部消息激发下行数据片段或者关闭会话。
3.压力测试机B通过LoadRunner并发启动P个vuser,随机的发起激发某一个长连接会话下行数据片段的请求,服务端接收请求后,主动向下推送数据片段。
这里有两个参数N和P,N就代表单机支持多少长连接,P代表并发创建多少个事件去激发下行数据。
事先环境准备:
Linux:(这块做过高并发测试的一般都还是会比较注意)
调整一下/etc/sysctl.conf的一些系统参数:(具体不解释了,看上面的英文注释)
#add by fangweng
fs.file-max = 65535
#Allow for more PIDs
kernel.pid_max = 65536
#Increase system IP port limits
net.ipv4.ip_local_port_range = 2000 65000
# TCP and memory optimization
# increase TCP max buffer size setable using setsockopt()
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
# increase Linux auto tuning TCP buffer limits
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
修改后:
sysctl -p /etc/sysctl.conf // 作用:重新载入/etc/sysctl.conf文件
Window调整(这个一定要注意)
放火墙和杀毒软件关掉!!!
注册表中修改
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TCPIP/Parameters
修改里面:
TcpTimedWaitDelay 为1(原来30)
MaxUserPort 65534
LoadRunner参数调整:
LoadRunner在为长连测试的时候,需要修改Run-time Settings,红色部分尽量大一些
测试:
1. 并发2000个连接保持会话。
2. 并发100个VUser模拟向100个长连接发起事件驱动消息。
观察得到的结果:
1. 建立起2000个连接过程中load保持在0.1到0.3左右,完全建立好后也就0.1多。(表明建立连接后现在的事件驱动处理方式没有空转损耗)
2. 并发100个Vuser开始循环压测的时候,会有少数几个连接主动掉线。(为了看是服务端主动断连还是客户端发起,执行了tcpdump,从抓包的结果可以看到客户端主动的发起了Fin消息,当前只能认为在大量数据包下行的情况下,系统还是有保护的将下发数据频率过高的连接断开了,当防火墙或者杀毒软件打开的时候,更是容易屏蔽,这点为将来长连在客户端的问题处理也积累经验)
3. 并发100个Vuser测试时,Load有明显上升,在1-2.6之间,同时通过vmstat可以看到上下文切换数量递增了两个数量级。Sar方式统计也可以很明显的看到在数据大量输入输出时,整个框架的系统消耗不小。
于是,开始判断哪里出了问题。
Load变高作为java程序员如何判断哪里出了问题呢,以下是我的经验排查方式:
1. GC是否比较频繁。(直接看gc log或者jstat gcutil)
2. IO消耗是否比较大。(cpu占用率到不高,vmstat)
3. 是否有代码空转。(cpu占用率很高,往往就几个线程长期持有cpu)
4. 是否有大量的线程Blocked。(dump线程出来看看)
在刚才的测试基础上做了一个简单的对比,如果把一百个并发请求分散到500个事件随机触发上,整理的load要低于100个事件随机模拟,也就是说数据越集中到某几个连接的事件上,消耗越大。
本地jprofiler测试了一下,看到大量的blocked线程是在处理消息输出的时候。原来当时为了简单处理并发,在response上面就增加了一个写锁,保证每次输出时候能够支持并发,但write这个动作被放在锁里是否适合?其实就是把一个时间消耗较长的动作去做了同步,最终其实使得在并发比较高,压力比较大时,竞争和阻塞厉害,导致系统消耗增大。因此还是按照传统的tcp sendbuffer模式,挂接内容支持多线程并发,输出数据为单线程循环发送,再简单测试了一下,Load明显下去了,基本就在1左右。
你可以尝试着去看vmstat,里面的procs中的r其实表示统计瞬时需要执行的任务队列长度,你会发现有时候通过top看到的load很低,但是r还是会有些上下波动,但如果任务执行的快,其实对于load影响不大。
继续测试:
并发连接数
|
事件激发模拟用户数
|
Load(建立连接过程)
|
Load(事件处理过程)
|
2000
|
100(50个事件随机选取)
|
0.1 - 0.3
|
0.6 – 1.2
|
5000
|
100(50个事件随机选取)
|
0.1 – 0.3
|
0.7 – 1.4
|
5000
|
200(100个事件随机选取)
|
0.1 – 0.3
|
0.8 – 1.6
|
这个数据并不能反映容量,但是可以说明的是,长连接数量对于系统在高并发事件处理影响不是很大,建立长连接和管理长连接所属的事件并不消耗系统资源(cpu,内存都观察过)
这篇分享中没有介绍测试中对于并发处理在异步事件驱动中的修改,具体的后续可以比较一下上次公布出来的代码和新代码的区别,简单来说:
1. 原本可以状态不脱离于线程,使得状态不比担心多线程并发控制,现在需要关注状态和资源的并发控制(例如request的lazy解析,response的输出,ThreadLocal的数据传递和复制)。
2. 客户端可以主动断开服务端,服务端网络失败也可以断开客户端,因此在任何一个对于悬挂起的异步web请求处理时都需要做好检查和资源回收处理,防止资源泄露。
3. 系统的事件驱动模型状态变更及对象内容变化要提供接口来保证用户操作时可以支持多线程并发处理。
后续还会使用java写的客户端去测试接收和发送频率是否匹配,同时必要的情况下也尝试测试慢连接(外部服务器连接)支持的情况。
待续…
分享到:
相关推荐
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
一、源码特点 JSP 宿舍管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发。 二、功能介绍 如博客中介绍, 三、注意事项 1、管理员账号:admin 密码:admin 数据库配置文件DBO.java ,权限包括管理员,学生 2、开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发。 3、数据库文件名是jspsushe 系统名称sushe 4、地址:http://127.0.0.1:8080/sushe/login.jsp 不包含人工服务,如果需要调试,联系作者购买
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Scratch少儿编程教学平台是一款专为儿童和青少年设计的编程学习工具,它集成了Scratch、ScratchJr、Python等多种编程教学工具,提供了全面且丰富的编程学习资源。平台内包含了各种编程课程,涵盖了从基础到进阶的各个层次,适合不同编程基础的学生学习。同时,平台还提供了班级和作业管理功能,方便教师进行教学管理和学生学习进度的跟踪。权限设置功能保证了平台的安全性和隐私性,而社区功能则为学生提供了一个展示自己作品和交流学习经验的平台。 这个编程教学平台适用于6-18岁的儿童和青少年,特别是对编程有兴趣的学生。无论是在学校的计算机课程中,还是在家庭中自我学习,都可以使用这个平台。教师可以利用这个平台进行教学,家长也可以通过这个平台引导孩子学习编程。 使用这个Scratch少儿编程教学平台,学生可以在轻松有趣的环境中学习编程,提升逻辑思维和创新能力。教师和家长可以通过平台监控学生的学习进度,及时给予指导和帮助。总的来说,这个平台为少儿编程教育提供了一个全面、便捷、有趣的解决方案。
5 采购计划物料跟催表-EPES19-SC-CG-023-2023.xls
Java毕业设计-基于SSM框架的经典诗文学习爱好者学习交流平台(源码+演示视频+说明).rar 【项目技术】 开发语言:Java 框架:ssm+vue 架构:B/S 数据库:mysql 【演示视频-编号:433】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 这次开发的经典诗文学习爱好者学习交流平台管理员功能有个人中心,用户管理,诗词分类管理,诗词赏析管理,系统管理等。用户可以注册登录,查看诗词赏析,公告信息,评价和收藏操作。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
基于pytorch深度学习框架的图像分类(集成了pytorch原生api, apex, DALI等...).zip
Python运维之多线程!!
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Java毕业设计-基于SSM框架的可视化高校公寓管理系统(源码+演示视频+说明).rar 【项目技术】 开发语言:Java 框架:ssm+vue 架构:B/S 数据库:mysql 【演示视频-编号:464】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 实现了用户在线选择试题并完成答题,在线查看考核分数。管理员管理班级管理、每日打卡管理、字典管理、访客管理、宿舍缴费记录管理、离校登记管理、宿舍管理、宿舍管理员管理、物品进出登记管理、学生管理、住宿信息管理、管理员管理等功能。
一个基于Django开发的深度学习Web平台.zip
基于SSM+Vue的学生宿舍门禁信息管理系统毕业设计(源码+录像+说明).rar 【项目技术】 开发语言:Java 框架:ssm+vue 架构:B/S 数据库:mysql 【演示视频-编号:479】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 该学生宿舍门禁信息管理系统具有完善的功能,界面一目了然,用户一看就会操作,管理员功能模块和用户功能模块是该系统的两大主要功能模块,其功能需求具体如下: 管理员的功能需求: 管理员在后台可以全面管理系统,管理员的功能主要包括用户管理、新闻管理、书籍管理和评论管理等。 用户的功能需求: 用户在没有注册之前,进入网站,用户的主要功能包括查看网站首页、公告信息、书籍分类和书籍信息,用户在注册登录后进入网站,用户的主要功能包括书籍评论、加入书架、书籍下载、个人信息管理、我的书架和我的留言。该学生宿舍门禁信息管理系统具有完善的功能,界面一目了然,用户一看就会操作,管理员功能模块和用户功能模块是该系统的两大主要功能模块,其功能需求具体如下: 管理员的功能需求: 管理员在后台可以全面管理系统,管理员的功能主要包括用户管理、新闻管理、书籍管理和评论管理等。 用户的功能需求: 用户在没有注册之前,进入网站,用户的主要功能包括查看网站首页、公告信息、书籍分类和书籍信息,用户在注册登录后进入网站,用户的主要功能包括书籍评论、加入书架、书籍下载、个人信息管理、我的书架和我的留言。
HTML5+CSS+JS精品网页模板,设置导航条、轮翻效果,鼠标滑动效果,自动弹窗,点击事件、链接等功能;适用于大学生期末大作业或公司网页制作。响应式网页,可以根据不同的设备屏幕大小自动调整页面布局; 支持如Dreamweaver、HBuilder、Text 、Vscode 等任意html编辑软件进行编辑修改; 支持包括IE、Firefox、Chrome、Safari主流浏览器浏览; 下载文件解压缩,用Dreamweaver、HBuilder、Text 、Vscode 等任意html编辑软件打开,只需更改源代码中的文字和图片可直接使用。图片的命名和格式需要与原图片的名字和格式一致,其他的无需更改。如碰到HTML5+CSS+JS等专业技术问题,以及需要对应行业的模板等相关源码、模板、资料、教程等,随时联系博主咨询。 网页设计和制作、大学生网页课程设计、期末大作业、毕业设计、网页模板,网页成品源代码等,5000+套Web案例源码,主题涵盖各行各业,关注作者联系获取更多源码; 更多优质网页博文、网页模板移步查阅我的CSDN主页:angella.blog.csdn.net。
ArduinoESP32板卡支持包
附件是Linux环境下搭建Zookeeper的分布式环境教程,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!