Netty websocket server压力测试
压测客户端和服务器端在同一台pc上。Pc配置:
AMD A10-5800K APU with Radeon(tm) HD Graphics 3.80Ghz 四核
4G RAM
西数WDC WD10EZEX-60ZF5A0 ( 1 TB / 7200 转/分) 这个可以不写的
主要的测试目标分为:
1. 服务器端在一定时间内可接受客户端空闲连接的数量/峰值;
每次建立tcp连接(包括web socket握手),平均需要180ms左右;
但是并不意味着 建立1000个连接需要180*1000ms,因为建立连接过程是异步的,详见压测客户端的代码。当建立较大量连接时(一万以内),所耗费的时间与连接数基本上是线性关系。
测试中,当测试6000连接数多于2次,在不重启jvm的情况下,测试程序客户端基本上就会报buffer空间不足的异常。
2. 服务器端同时保持空闲长连接的数量/峰值;
服务器启动后,可以看到已使用内存为358M,客户端连接后为457M。它们之间的差值并不是保持所有连接 耗费的内存。因为建立连接过程中,在新生代中产生了很多垃圾内存。
标准的测试方法是:在开始连接之前,强制gc,这时看到是java进程真正占用的内存m1;在1w个连接建立之后,再次强制gc,用当前值m2减去上次gc后的内存值m1,才是保持连接实际占用的内存值,约为25M。
注意:频繁连接服务器建立1w个连接,即使全部断开,在客户端netstat –p依然可以看到这2w个端口在被占用着,未完全释放。这时就会出现异常 java.net.SocketException: No buffer space available (maximum connections reached?): connect
3. 分别在单个连接和多个连接的情况下,统计服务器端netty网络层的吞吐率。
时间表示客户端从发送第一个ping消息 开始计时,在收到最后一个pong消息后结束计时。
多连接:
连接数 |
每个连接ping次数 |
时间 |
吞吐率 |
1k |
100 |
4280ms |
23364 |
1k |
500 |
10432ms |
47929 |
1k |
1k |
18082ms |
55303 |
1k |
2k |
36261ms |
55155 |
2k |
100 |
6900ms |
28985 |
2k |
500 |
19610ms |
50994 |
2k |
1000 |
33727ms |
59299 |
3k |
100 |
9752ms |
30762 |
3k |
500 |
31461ms |
47678 |
3k |
1000 |
56176ms 122491ms |
压测无法进行(丢包,卡) |
4. 测试网络流量
客户端向服务器端发送ClientRequest,payload为LoadTest对象,序列化为json字符串,大约800+个字符。可大致认为每条请求消息字符长度为800+。
每个连接请求次数 |
时间 |
平均每秒请求数 |
IO性能(每秒字符数) |
|
1 |
1k |
566ms |
1766 |
|
1 |
5k |
1099ms |
4549 |
|
1 |
1w |
1157ms |
8643 |
|
1 |
10w |
5601ms |
17853 |
|
1k |
100 |
11094ms |
9013 |
|
100 |
25959ms |
7692 |
|
|
3k |
100 |
40062ms |
7500 |
|
|
|
|
|
|
相关推荐
netty_websocket示范网页聊天项目源码netty_websocket示范网页聊天项目源码netty_websocket示范网页聊天项目源码
Netty4.0全部jar包.开发时候只需要倒入总的哪一个netty4.0.jar就行了 后缀为resources.jar的全部是源码。 简单的代码例子在netty-example-resources.jar里面。
Netty (netty-netty-4.0.56.Final.tar.gz)是一个 NIO 客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。它极大地简化和流线了网络编程,例如 TCP 和 UDP 套接字服务器。 “快速和简单”并...
IDE:myeclips 服务器:tomcat JDK:1.7+ 说明: 直接运行 浏览器进入页面聊天 功能:把微信公众号收到的消息推送到页面(微信公众测试号需自己申请)
netty5_兼容tcp、websocket小例子 实现信息广播,socket客户端连接后会受到getid此时socket客户端发送个六位数进行验证
《Netty进阶之路 跟着案例学Netty》_李林锋_2018-11-01
Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息示例代码;Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息示例代码;Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息示例代码
配置maven添加io.netty 在com.zhao的包下的文件,可以自行修改使用
Spring+Netty+WebSocket实例,通用性还行,比较贴近生产,注释什么写的比较全
描述文档请看我的个人博客:www.mesoftware.cn
NIO socket开发,netty4.0工具包。
Springboot2.0.8集成 netty4 ,使用protobuf作为ping的数据交换,比json更加的小巧,占用数据量更小,可用于任何第三方应用做心跳监控。 已完成功能: - 客户端授权验证(基于protoBuff) - 心跳检测(基于protoBuff) ...
netty4.0 关于buffe
Netty4.0实现http服务,客户端通过http请求,服务器进行业务处理,返回响应,交互采用json格式
netty4.0.45jar包socket和http工具包,公司最近开发一个保险项目,用到socket,经过公司10个以上项目验证,该版本的netty4.0.45相当稳定,可以在生产环境上使用。
基于Netty的Java WebSocket集群框架。
NULL 博文链接:https://bijian1013.iteye.com/blog/2340636
实现netty作为服务端,websocket连接成功,将channel保存到map集合,通过js发送心跳,服务端接收心跳信息并响应给客户端,当服务端断开时 客户端进行重连操作
netty里集成spring注入mysq连接池源代码
Netty4.0.54英文版API文档,与官网中文档内容一致,方便用户在离线环境下,开发Netty